Tri*_*k M 4 c c-preprocessor preprocessor-directive
(我正在开发一个SDK,其中我有特定SDK的代码参考,我无法追踪程序的流程.)
是什么
#if defined (AR7x00)
Run Code Online (Sandbox Code Playgroud)
意思?具体来说,这样的预处理器运算符中括号的目的是什么?
这三个预处理器指令:
#if defined (AR7x00)
#if defined AR7x00
#ifdef AR7x00
Run Code Online (Sandbox Code Playgroud)
所有意思都完全相同:只有AR7x00当前定义宏时,才会处理以下代码.
该#ifdef ...指令只是一个方便的替代方案#if defined ....还有一个#ifndef ...指令; #ifndef FOO相当于#if ! defined FOO.
对于括号,defined运算符的语法允许标识符或括号中的标识符,其含义没有区别.我不完全确定为什么括号是可选的; 我怀疑这只是历史性的.(1978年第一版K&R中的语言参考文献没有提到defined操作员.第二版显示两种形式,有或没有括号.)
严格地说,这些不是你在普通表达中看到的那种括号括号; 它们是defined运算符语法的一部分,只能在预处理程序#if指令中使用.特别是,这个:
#if defined ((AR7x00))
Run Code Online (Sandbox Code Playgroud)
是语法错误.
小智 5
我认为在预处理器中使用多个条件时,括号更为重要。例如下面的条件表达式
#if defined( foo ) || defined( bar )
#error SOME PROBLEM
#endif
Run Code Online (Sandbox Code Playgroud)
在我的 gnu-arm-gcc 环境中的评估与此不同
#if defined foo || defined bar
#error SOME PROBLEM
#endif
Run Code Online (Sandbox Code Playgroud)
第一个示例符合我的预期,而另一个示例似乎永远不匹配,无论标记“foo”和/或“bar”是否#define。
| 归档时间: |
|
| 查看次数: |
1811 次 |
| 最近记录: |