首页 技术资料正文

C语言条件编译(#if,#ifdef,#ifndef,#endif,#else,#elif)(clion)

piaodoo 技术资料 2022-08-26 23:56:07 1082 0

C语言条件编译(if,ifdef,ifndef,endif,else,elif)(clion)

C语言条件编译(if,ifdef,ifndef,endif,else,elif)

例如,可以使用条件编译让源代码适用于不同的目标系统,而不需要管理该源代码的各种不同版本。以 if 开头的条件编译区域具有下面的格式:

if 表达式1
  [ 组1]
[elif 表达式2
  [ 组2]]
...
[elif 表达式n
  [ 组n ]]
[else
  [ 组n+1 ]]
endif
预处理器会依次计算条件表达式,直到发现结果非 0(也就是 true)的条件表达式。预处理器会保留对应组内的源代码,以供后续处理。如果找不到值为 true 的表达式,并且该条件式编译区域中包含 else 命令,则保留 else 命令组内的代码。组 1、组 2 等代码段,可以包含任意 C 源代码,也可以包含更多的命令,包括嵌套的条件式编译命令。在预处理阶段结束时,没有被预处理器保留以用于后续处理的组会从程序中全部删除。

if 和 elif 命令

这与普通的整数常量表达式不同,主要区别在于:(1) 不能在 if 或 elif 表达式中使用类型转换运算符。(2) 可以使用预处理运算符 defined。(3) 在预处理器展开所有宏,并且计算完所有 defined 表达式之后,会使用字符 o 替换掉表达式中所有其他标识符或关键字。(4) 表达式中所有带符号值都具有 intmax_t 类型,并且所有无符号值都具有 uintmax_t 类型。字符常量也会受该规则的影响。intmax_t 和 uintmax_t 定义在头文件 stdint.h 中。(5) 预处理器会把字符常量和字符串字面量中的字符与转义序列转换成运行字符集中对应的字符。然而,字符常量在预处理器表达式和在后期编译阶段是否具有相同的值,取决于实现版本。

defined 运算符

它的形式如下:
defined 标识符
defined (标识符)
如果指定的  identifier 是一个宏名称(也就是说,它已被 define 命令定义,并且未被 undef 命令取消定义),则 defined 表达式会生成值 1。否则,defined 表达式会生成值 0。defined 运算符相对于 ifdef 和 ifndef 命令的优点是:你可以在更大型的预处理器表达式中使用它的值。如下例所示:
if defined( __unix__ ) && defined( __GNUC__ )
/* ... */
endif
,例如上例所使用的宏,它用来识别目标系统和编译器。因此,在 Unix 系统中,通常预先定义好了宏 __unix__,而 GCC 编译器则会预先定义好了宏 __GNUC__。类似地,微软 Windows 平台上的 Visual C 编译器会自动定义好宏 _WIN32 和宏 _MSC_VER。

ifdef 和 ifndef 命令

你。它们的语法是:
ifdef 标识符
ifndef 标识符
这等同于下面的 if 命令:
if defined 标识符
if !defined 标识符
如果 identifier 不是宏名称,则 ifndef 标识符后面的条件代码被保留。

版权声明:

本站所有资源均为站长或网友整理自互联网或站长购买自互联网,站长无法分辨资源版权出自何处,所以不承担任何版权以及其他问题带来的法律责任,如有侵权或者其他问题请联系站长删除!站长QQ754403226 谢谢。

有关影视版权:本站只供百度云网盘资源,版权均属于影片公司所有,请在下载后24小时删除,切勿用于商业用途。本站所有资源信息均从互联网搜索而来,本站不对显示的内容承担责任,如您认为本站页面信息侵犯了您的权益,请附上版权证明邮件告知【754403226@qq.com】,在收到邮件后72小时内删除。本文链接:https://www.piaodoo.com/119326.html

搜索