c++宏变量的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++宏变量的问题相关的知识,希望对你有一定的参考价值。
#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中搜索一下就找到了。看看文档。你就明白了。
所以说,呵呵。。。加油,求知永远是没有错的。 参考技术A WIN32 属于预编译宏定义,不是编译宏定义
我只能举 VC++6.0 的例子:
Project -> Setting -> C/C++ -> Preprocessor definitions
里面有定义的 参考技术B 你鼠标放在宏上按F12 参考技术C 编译器的问题,在VC里面的工程设置里面可以看到win32是预定义的宏之一
我猜测devc++应该也有类似工程的概念,在工程里面会预定义这个宏
以上是关于c++宏变量的问题的主要内容,如果未能解决你的问题,请参考以下文章