卫计局网站建设工作总结,室内设计与装修杂志,网站系统的设计与实现,wordpress 连接被重置目录
1. #if #elif #else #endif
2. #ifdef #else #endif
3. #ifndef #else #endif
4. 三者区别 根据不同情况编译不同代码、产生不同目标文件的机制#xff0c;称为条件编译。
条件编译是预处理程序的功能#xff0c;不是编译器的功能。
1. #if #elif #else #endif …目录
1. #if #elif #else #endif
2. #ifdef #else #endif
3. #ifndef #else #endif
4. 三者区别 根据不同情况编译不同代码、产生不同目标文件的机制称为条件编译。
条件编译是预处理程序的功能不是编译器的功能。
1. #if #elif #else #endif
#if 的一般格式为
#if 整型常量表达式1程序段1
#elif 整型常量表达式2程序段2
#elif 整型常量表达式3程序段3
#else程序段4
#endi
它的意思是如常“表达式1”的值为真非0就对“程序段1”进行编译否则就计算“表达式2”结果为真的话就对“程序段2”进行编译为假的话就继续往下匹配直到遇到值为真的表达式或者遇到 #else。这一点和 if else 非常类似。
需要注意的是#if 命令要求判断条件为“整型常量表达式”也就是说表达式中不能包含变量而且结果必须是整数而 if 后面的表达式没有限制只要符合语法就行。这是 #if 和 if 的一个重要区别。
#elif 和 #else 也可以省略如下所示
#include stdio.h
int main(){#if _WIN32printf(This is Windows!\n);#elseprintf(Unknown platform!\n);#endif#if __linux__printf(This is Linux!\n);#endifreturn 0;
}
2. #ifdef #else #endif
#ifdef 用法的一般格式为
#ifdef 宏名程序段1
#else程序段2
#endif
它的意思是如果当前的宏已被定义过则对“程序段1”进行编译否则对“程序段2”进行编译。
也可以省略 #else
#ifdef 宏名程序段
#endif
示例
#include stdio.h
#include stdlib.h
int main(){#ifdef _DEBUGprintf(正在使用 Debug 模式编译程序...\n);#elseprintf(正在使用 Release 模式编译程序...\n);#endifsystem(pause);return 0;
}
3. #ifndef #else #endif
#ifndef 用法的一般格式为
#ifndef 宏名程序段1
#else 程序段2
#endif
与 #ifdef 相比仅仅是将 #ifdef 改为了 #ifndef。它的意思是如果当前的宏未被定义则对“程序段1”进行编译否则对“程序段2”进行编译这与 #ifdef 的功能正好相反。
#ifndef 在头文件可用于避免文件被重复包含。
#ifndef _PRJ_DIR_FILE_H //必须确保header guard宏名永不重名
#define _PRJ_DIR_FILE_H//头文件内容#endif
4. 三者区别
#if 后面跟的是“整型常量表达式”而 #ifdef 和 #ifndef 后面跟的只能是一个宏名不能是其他的。
例如下面的形式只能用于 #if
#include stdio.h
#define NUM 10
int main(){#if NUM 10 || NUM 20printf(NUM: %d\n, NUM);#elseprintf(NUM Error\n);#endifreturn 0;
}
再如两个宏都存在时编译代码A否则编译代码B
#include stdio.h
#define NUM1 10
#define NUM2 20
int main(){#if (defined NUM1 defined NUM2)//代码Aprintf(NUM1: %d, NUM2: %d\n, NUM1, NUM2);#else//代码Bprintf(Error\n);#endifreturn 0;
}
#ifdef 可以认为是 #if defined 的缩写。