This question already has answers here:
3 plus symbols between two variables (like a+++b) in C [duplicate]
(3个答案)
7年前关闭。
在printf语句
(3个答案)
7年前关闭。
在printf语句
i+++j
中,是否始终将其视为i++ +j
?#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main() {
int i =5,j= 6, z;
z=i^j;
printf("%d",i+++j);
return 0;
}
最佳答案
i+++j
等效于i++ + j
。
这与运算符优先级无关。在解析表达式之前,编译器将+++
解析为++ +
。
C标准定义了一系列翻译阶段,每个阶段均使用前一个阶段的输出作为输入。阶段3将+++
解析为++ +
,这会将源分解为预处理器 token 。在阶段7,句法和语义分析之前,不考虑运算符优先级。 (翻译阶段不必作为不同的阶段或过程来实现,但是编译器必须表现得就像它们一样。)
说+++
的规则被解析为++ +
而不是+ ++
的规则被非正式地称为“最大mu割规则”。在第6.4节第4段中进行了说明:
(有趣的是,该索引指的是“最大嚼食”,但该术语在标准中没有其他地方提及。)
这也意味着i+++++j
(可以标记为有效表达式i++ + ++j
)实际上是i ++ ++ + j
,这是语法错误。
当然,对于程序员而言,解决方案是添加空格以使对 token 的划分清楚:i++ + j
。 (i+++j
对编译器是完全清楚的,但i++ + j
对人类读者而言则更加清晰。)
引用:N1570,第6.4节,第4段。N1570是2011 ISO C标准的草案。该规则与标准的早期版本相同。讨论了翻译阶段
关于c - i+++ j总是被视为i+++ j吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18560904/
10-11 18:22