(1) #define后面只跟一个“参数”
定义宏,并在预处理过程中将其替换为空字符串(即删除)。 这样做主要是为了标记某些内容,使程序阅读者能够清楚标记表明的意义,同时又不影响被编译的源代码。另外,通常这些标记能被条件编译的预处理命令#ifdef、#ifndef检测到。一个重要的用法是多文件编译中防止头文件被重复包含,如: header.h: #ifndef _HEADER_ #define _HEADER_ /*something*/ #endif a.c #include"header.h" /*something*/ main.c #include"header.h" /*something*/ 这样无论哪个.c文件先被编译,包含header.h以后,之后进入#include后header.h中的_HEADER_已定义,那么#ifndef _HEADER_和#endif之间的代码不会被重复编译,header.h的目标代码只存在于其中一个源文件的目标代码文件中,链接器链接两个源文件编译的目标文件时不会产生因为重复编译导致的重复定义的链接错误。