#ifdef和#else
特别注意*:#ifdef和#endif是成对出现的
例子:
#ifdef UNICODE
wchar_t a;
#else
char a;
#endif
特别注意*:这里的UNICODE 要大写。想要更改UICODE 版本,属性->高级->字符集,里面修改。这里的#ifdef也可以直接写成#if,用法和if ,else是一样的
预定义宏
不同编译器预定义的宏是不一样的
_func_
编译器支持ISO C99和ISO C++11指定的预定义标识符
含义:函数的名称
int main()
{
std::cout<<_func_;
}
输出结果为 main
C99和C++17标准指定的宏
C++标准委员和C标准委员会要求定义的宏
_DATE_ | 源文件的编译日期 |
_TIME_ | 当前转换单元的转换时间 |
_FILE_ | 源文件的名称 |
_cplusplus_ | 当翻译单元为c++时,_cplusplus文本定义为一个整数文本,否则为未定义 |
MSVC指定的宏
MSVC可以理解为微软的VC编译器,下面的这些宏仅在MSVC,即VS下有效
_CHAR_UNSIGNED | 如果char为无符号,则宏定义为1,否则为未定义。因为char的取值范围可能为-128~127,也可能时0~255,这是由编译器决定的 |
COUNTER_ | 每次使用这个宏后,宏的值就会加1 |
_DEBUG_ | 如果编译器为debug模式,则定义为1,否则未定义 |
_FUNCTION | 函数名称,不含修饰名 |
_FUNCDNAME | 函数名称,包含修饰名 |
_FUNCSIG | 包含函数签名的函数名。函数签名:调用约定、返回值、函数参数等基本信息 |
_WIN32 | 编译器为32、64位,定义为1,否则未定义 |
_WIN64 | 编译器为64位,定义为1,否则未定义 |
_TIMESTAMP_ | 最后一次源代码修改的时间和日期 |