C语言中的条件编译
条件编译是指预处理器根据条件编译指令,有条件地选择源程序代码中的一部分代码作为输出,送给编译器进行编译。主要是为了有选择性地执行相应操作,防止宏替换内容(如文件等)的重复包含。
常见的编译命令
条件编译指令 说 明
#if 如果条件为真,则执行相应操作
#elif 如果前面条件为假,而该条件为真,则执行相应操作
#else 如果前面条件均为假,则执行相应操作
#endif 结束相应的条件编译指令
#ifdef 如果该宏已定义,则执行相应操作
#ifndef 如果该宏没有定义,则执行相应操作
常见的结构
#if-#else-#endif 结构
#include<stdio.h>
#define RESULT 0//定义 RESULT 为 0
int main (void)
{
#if !RESULT //或者 0==RESULT
printf("It's False!\n");
#else
printf("It's True!\n");
#endif //标志结束#if
return 0;
}
#ifndef-#define-#endif结构
通过此结构 可以在特定的场景下进行宏定义
#ifndef PI
#define PI 3.1416
#endif
另一个应用,防止头文件引用冲突
当该头文件第一次被包含时,由于没检测到该头文件名对应的符号(宏名)HEADNAME_H,则定义该头文件名对应的符号(宏),其值为该系统默认。并且,该条件编译指令选中 #endif 之前的头文件内容;如果该头文件再次被包含时,由于检测到已存在以该头文件名对应的符号(宏名),则忽略该条件编译指令之间的所有代码,从而避免了重复包含。
如果 f.c 源文件中包含 f1.h 和 f2.h 两个头文件,而 f1.h 头文件及 f2.h 头文件中均包含 x.h 头文件,则 f.c 源文件中重复包含 x.h 头文件。可采用条件编译指令,来避免头文件的重复包含问题。
#ifndef _HEADNAME_H_
#define _HEADNAME_H_
//头文件内容
#endif
#if-#elif-#else-#endif
类似之前定义的#if-#else-#endif结构 。不再详细说明
补充:C语言中条件表达式真假约束
语言使用0代表假,非0代表真
if(a=0);
就相当于
a=0;
if(a);
就相当于
if(0);
括号中的条件是假
注意: 在linux系统动作的过程中,我们要注意区分。在linux操作系统执行命令的时候,最后的返回结果:0代表成功。 >0,则代表失败。
shell的返回结果正和C语言中返回结果== 相反 ==