各种预处理命令 笔记 #if #else #elif #define #undef
#if 要求判断条件为常量表达式,不得包含变量。且返回值为整数。
与 #else #elif #endif 使用。
和 if else 的用法类似。
例如:
1 #include <stdio.h> 2 3 #define M 100 4 5 int main(){ 6 7 #if M==100 8 printf("already\n"); 9 #else 10 #undef M 11 #define M 10 12 #endif // M 13 printf("%d\n", M); 14 return 0; 15 }
运行结果: already
100
#ifdef 用来判断某个宏是否定义,如果已定义则执行后面的代码。
用法:
1 #ifdef 宏名 2 3 程序段 1 4 5 #else 6 7 程序段 2 8 9 #endif
类似if的用法,若宏被定义,则执行程序段1,否则执行程序段2。
小知识:
//宏定义 #ifdef _WIN32 是由编译器(ml.exe/ml64.exe)内部定义的。
//_WIN32:Defined for applications for Win32 and Win64. Always defined.
//用来判断是否是WINDOWS平台
1 #include <stdio.h> 2 3 #define M 100 4 5 int main(){ 6 7 #ifdef M 8 printf("%d\n", M); 9 #else 10 #undef M 11 #define M 10 12 #endif // M 13 14 return 0; 15 }
复习一下:
#include " " 的话,是从当前目录检索头文件,未检测到的话,再到系统路径检索。然后 #include< > 的话,是首先从系统路径下检索。
所以如果自己编写了头文件(且放到当前目录下)的话,最好还是用双引号吧。。。
#define 如果定义的话,其作用域是从文件开始到结尾。由预处理器来处理。