预处理命令
程序设计语言的预处理的概念:在编译之前进行的处理。 C语言的预处理主要有三个方面的内容: 1.宏定义; 2.文件包含; 3.条件编译。预处理命令以符号“#”开头。
#pragma
#Pragma的作用是设定编译器的状态或者是指示编译器完成一些特定的动作,其格式一般为: # pragma Para
#Pragma message(“消息文本”),当编译器遇到这条指令时就在编译输出窗口中将消息文本打印出来
#Pragma once,只要在头文件的最开始加入这条指令就能够保证头文件被编译一次
#pragma warning(disable:4507 34) //不显示4507和34号警告信息
#pragma warning(once:4385) // 4385号警告信息仅报告一次
#pragma warning(error:164) //把164号警告信息作为一个错误
#define
带参数定义 #define Cube(x) (x)*(x)*(x)
带参数的宏和函数调用看起来有些相似,可以时任何数字表达式甚至函数调用来代替参数x。宏展开后完全包含在一对括号中,而且参数也包含在括号中,这样就保证了宏和参数的完整性。
#运算符,出现在宏定义中的#运算符把跟在其后的参数转换成一个字符串:
#define PASTE(n) "adhfkj"#n
main(){printf("%s/n", PASTE(15));} == adhfkj15
宏定义中的#运算符告诉预处理程序,把源代码中任何传递给该宏的参数转换成一个字符串。
#error
停止编译并显示错误信息,当预处理器预处理到#error命令时将停止编译并输出用户自定义的错误消息。
#if (OS_TASKCNT == 0)
#error "Invalid number of concurrent running threads!"
#endif
条件预编译:#ifdef、#ifndef、#elif、#endif
很巧的应用例子:
#ifdef OS_GLOBALS
#define OS_EXT //定义生效,则这个OS_EXT就是个无效的类型
#else
#define OS_EXT extern //没有定义变量OS_GLOBALS ,OS_EXT就等效于extern类型
#endif