c++宏变量的问题

来源:百度知道 编辑:UC知道 时间:2024/06/01 07:40:19
#ifdef _WIN32
#include <windows.h>
#else
#include <dirent.h>
#endif
这段代码的意思是如果定义 _WIN32,则包含windows.h(windows系统)如果没定义_WIN32,则包含dirent.h,这个dirent.hlinux下的。
我没见到文件中定义了_WIN32,即然没定义应该不包含windows.h啊,但是又确实包含了该头文件,因此只能说明已经定义了_WIN32,但在文件中找不到,网上搜索说_WIN32变量是windows系统特有的一个宏,但是怎么才能找到它的定义呢?它到底下哪定义了呢?
还有我把#ifdef _WIN32改成#ifdef WIN32也可以,它们_WIN32和WIN32是同一个变量吗?我用的是devc++,但是我用win-tc编译则发现win-tc没定义WIN32和_WIN32这个变量,这又是怎么回事,不是说它是windows系统特有的一个宏吗?抑或是和编译器有关。有的能识别WIN32有的不能识别WIN32。
#ifdef _WIN32;
#define CURRENT_PLATFORM "WIN32"
#else
#define CURRENT_PLATFORM "Not WIN32"
#endif
printf("CURRENT_PLATFORM = %s\n", CURRENT_PLATFORM);
devc++编译后结果是CURRENT_PLATFORM = WIN32
win-tc编译后结果是CURRENT_PLATFORM = Not WIN32

相当无语。
_WIN32是编译器预定义的,你怎么能够看到呢?
WIN32的意义:
#if defined(_WIN32) && !defined(WIN32)
#define WIN32 _WIN32
#endif
能否看到就看实现者是怎么做的了。
所以我们通常这么做:
#if defined(_WIN32) || defined(WIN32)
// windows平台
#else
// 其它平台
#endif

不但_WIN32是这样,_DEBUG和DEBUG有的时候也是一对,呵呵。

VC还有其它预编译宏:__FUNCTION__ __LINE__ __FILE__
你可以在MSDN中搜索一下就找到了。看看文档。你就明白了。

所以说,呵呵。。。加油,求知永远是没有错的。

WIN32 属于预编译宏定义,不是编译宏定义
我只能举 VC++6.0 的例子:
Project -> Setting -> C/C++ -> Preprocessor definitions
里面有定义的

编译器的问题,在VC里面的工程设置里面可以看到win32是预定义的宏之一

我猜测devc++应该也有类似工程的概念,在工程里面会预定义这个宏

你鼠标放在宏上按F12