C预编译器-35(编译指示Pragmas)

7 编译指示(Pragmas)

#pragma 指令是 C 标准指定的向编译器提供语言本身无法传达的额外信息的方法。C 标准规定的这种指令(通常称为编译指示)以 STDC 为前缀。C 编译器可以自由地赋予其他编译指示任何它喜欢的含义。大多数由 GNU 定义和支持的编译指示都带有 GCC 前缀。

C99 引入了 _Pragma 操作符。这一特性解决了 #pragma 的一个主要问题:作为一个指令,它不能作为宏扩展的结果产生。_Pragma 是一种操作符,类似于 sizeofdefined,可以嵌入到宏中。

其语法为 _Pragma (string-literal),其中 string-literal 可以是普通或宽字符字符串字面量。它通过将所有 '\\' 替换为单个 '\' 并将所有 \" 替换为 " 来进行字符串化处理。然后,结果会被当作出现在 #pragma 指令右侧的内容来处理。例如,

_Pragma ("GCC dependency \"parse.y\"")

的效果等同于:

#pragma GCC dependency "parse.y"

同样的效果可以通过宏实现:

#define DO_PRAGMA(x) _Pragma (#x)
DO_PRAGMA (GCC dependency "parse.y")

标准对于 _Pragma 操作符可以在哪里出现并不明确。预处理器不接受它出现在类似 #if 这样的预处理条件指令内。为了安全起见,您最好将其放在除 #define 之外的指令之外,并单独占一行。

本手册记录了对预处理器本身有意义的编译指示。其他编译指示对 C 或 C++ 编译器有意义,在 GCC 手册中有文档说明。GCC 插件可以提供自己的编译指示。

常用的 GCC 编译指示:
  • #pragma GCC dependency

     

    允许检查当前文件和另一个文件的相对日期。如果另一个文件比当前文件更新,则发出警告。这对于当前文件是从另一个文件派生且应重新生成的情况非常有用。另一个文件使用正常的包含搜索路径查找。可选的尾随文本可用于在警告消息中提供更多详细信息。

    #pragma GCC dependency "parse.y"
    #pragma GCC dependency "/usr/include/time.h" rerun fixincludes
  • <

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值