小编var*_*han的帖子

为什么这个有效的C?---({123;})评估为123

可能重复:
c的哪个版本是用于返回有效值的括号内的块?

以下是典型MAX宏的类型安全版本(适用于gcc 4.4.5):

#define max(a,b) \
({ __typeof__ (a) _a = (a); \
   __typeof__ (b) _b = (b); \
 _a > _b ? _a : _b; })
Run Code Online (Sandbox Code Playgroud)

在这里,我们看到这个表达式max(a,b)返回表达式的结果

_a > _b ? _a : _b;
Run Code Online (Sandbox Code Playgroud)

即使这个表达式是一个块.所以,我调查过,发现这是有效的C:

int a = ({123;}); // a is 123
Run Code Online (Sandbox Code Playgroud)

有人可以解释为什么这是有效的语法和({statements})的真实行为是什么?另外,您会注意到{123;}不是有效的表达式,而只是({123;}).

c c++ grammar context-free-grammar

7
推荐指数
1
解决办法
394
查看次数

标签 统计

c ×1

c++ ×1

context-free-grammar ×1

grammar ×1