LZ所说的这些以“#”号开头的都是C语言中的预处理命令。一般都放在源文件的前面,是在对源程序正式编译前由预处理程序完成的。
所谓预处理是指在进行编译的第一遍扫描(词法扫描和语法分析)之前所作的工作。预处理是C语言的一个重要功能, 它由预处理程序负责完成。
当对一个源文件进行编译时, 系统将自动引用预处理程序对源程序中的预处理部分作处理, 处理完毕自动进入对源程序的编译。
具体解释如下:
#define:宏定义命令,就是用一个标识符来表示一个字符串。
例如 #define MAX 100 那么,在代码中就可以使用标识符MAX来代替100这个具体的值(这个叫宏代换,宏展开),如果想修改,直接修改定义处的值,而代码不必改,便于程序的修改。
#include:文件包含命令,一个C程序可能需要一些函数原型的声明文件,或者多人开发的源程序,包含命令就是将这些文件内容引入到本源文件中,形成一个完整的C项目程序。例如 #include"math。h" 就是将数学公式函数的头文件包含进来,代码中才能调用一些数学公式。
#ifdef #else #endif #ifndef #undef:这些是相到关联的条件编译命令。可以按不同的条件去编译不同的程序部分,因而产生不同的目标代码文件。 这对于程序的移植和调试是很有用的。
例如:
ifdef 标识符
程序段1
#else
程序段2
#endif
功能是,如果标识符已被 #define命令定义过则对程序段1进行编译;否则对程序段2进行编译。
如果没有程序段2(为空),则#else可以省略。
#ifndef 标识符
程序段1
#else
程序段2
#endif
与第一种形式的区别是将“ifdef”改为“ifndef”。它的功能是,如果标识符未被#define命令定义过则对程序段1进行编译, 否则对程序段2进行编译。
这与第一种形式的功能正相反。
#line:
改变_LINE_ 与_ F I L E _的内容,它们是在编译程序中预先定义的标识符。命令的基本形式如下:
# line number["filename"]
其中的数字为任何正整数,可选的文件名为任意有效文件标识符。
行号为源程序中当前行号,文件名为源文件的名字。命令#line主要用于调试及其它特殊应用。
例如,下面说明行计数从100开始;printf()语句显示数102,因为它是语句#line 100后的第3行。
#line 100 /* 初始化行计数器* /
main ( ) /* 行号100 */
{ /* 行号101 */
printf("%d\n",_line_) ; /* 行号102 */
}
。
全部