C语言中的条件编译

常用的预编译指令包括文件包含,宏定义和条件编译
文件包含
文件包含很简单,也是最常见的,语法格式:

#include <头文件>
#include "头文件"

顺便说一下这两种形式的不同:
尖括号<>这种方法只能引用编译器类里的头文件
也就是编译器只会查找保存系统标准头文件的文件
双引号""这种方法编译器先查找当前目录是否有指定名称的头文件
然后在从标准头文件目录中查找
在实际编程中,如果包含的头文件是我们自己编写的,那么使用双引号""这种方法

宏定义:
宏定义在头文件中也很常见,语法格式:

#define 标识符
#undef 标识符

标识符的命名一般是全大写,中间用下划线分隔
我们来简单说一下不常用的#undef
他的作用就是将前面定义的宏标识符取消定义
但是在《MISRA-C-2004工业标准的C规范》中要求不允许使用#undef
规则19.6(强制):不要使用#undef
通常,#undef是不需要的.当它出现在代码中时,能使宏的存在或含义产生混乱

条件编译
条件编译命令指定预处理器依据特定的条件来判断保留或删除某段源代码
条件编译有很多,在标准头文件中很常见,但是在我们平时的学习中遇到的并不多
#if 和 #elif 命令
语法格式:

#if 表达式1 
 [1]
[#elif 表达式2 
 [2]]
...
[#elif 表达式n 
 [ 组n ]]
[#else 
 [ 组n+1 ]]
#endif

条件编译区域以 #if、#ifdef 或 #ifndef 等命令作为开头,以 #endif 命令结尾
条件编译区域可以有任意数量的 #elif 命令,但最多一个 #else 命令
代码逻辑与条件语句if一样

下面是从头文件中截取的一段代码

#if 7 <= __GNUC__ && !defined __ICC
# define _GL_HAS_BUILTIN_ADD_OVERFLOW 1
#elif defined __has_builtin
# define _GL_HAS_BUILTIN_ADD_OVERFLOW __has_builtin (__builtin_add_overflow)
#else
# define _GL_HAS_BUILTIN_ADD_OVERFLOW 0
#endif

#ifdef 和 #ifndef 命令
语法格式:

#ifdef 标识符
	/* 代码段 */
#endif

等同于:

#if defined 标识符
	/* 代码段 */
#endif

如果定义了标识符,那么编译代码段

#ifndef 标识符
	/* 代码段 */
#endif

等同于:

#if !defined 标识符
	/* 代码段 */
#endif

如果没有定义标识符,那么编译代码段
当然代码段也可以添加#elif和#else分支
下面是从头文件中截取的代码段

#ifdef __WCHAR_MAX__
# define __WCHAR_MAX	__WCHAR_MAX__
#elif L'\0' - 1 > 0
# define __WCHAR_MAX	(0xffffffffu + L'\0')
#else
# define __WCHAR_MAX	(0x7fffffff + L'\0')
#endif
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值