改变了当前预处理器的当前行和文件名称。对应着两个宏__FILE__和__LINE__。
#line lineno
#line lineno “filename”
int main()
{
#line 777 "i'm here.cpp"
assert("love" == "don't love");
return 0;
}
#error error_message
int main()
{
int i = 2;
#ifndef IKDJFO
#error i don't know, i'm tired
#endif
return 0;
}
error_message不是必须使用引号包含起来。
#if expression
#ifdef expression
#ifndef expression
#elif expression
#else
#endif
#define identifier replacement-list
#define identifier(parameters) replacement-list
#define identifier(parameters,...) replacement-list
#define identifier(...) replacement-list
#undef identifier
#进行字符串化,所有开始的和结束的空白字符忽略掉,中间的多个空白字符被移除。
#define warnmessage(x) #x
int main()
{
puts(warnmessage( th ewor d"dfasf" )); /*th ewor d"dfasf"*/
return 0;
}
##将两个子串联结起来,从而形成一个新的子串。
#define paster(n) printf("token"#n"=%d",token##n);
int main()
{
int token9 = 9;
paster(9);
return 0;
}
预先定义常用的几个宏
__cplusplus 表示C++的版本号
__FILE__ 当前的文件名称
__LINE__ 当前的行号
__DATE__ 本地机器的当前日期
__TIME__ 本地机器的当前时间
#include <filename> 只到标准的包含目录中查找
#include “filename” 先到当前的文件目录查找,再到标准的包含目录中查找