int main ()
{
int a = 5,b = 2;
printf("%d",a+++++b);
return 0;
}
此代码给出了以下错误:
错误:左值需要作为增量操作数
但是,如果我把整个空间a++ +
和++b
,然后正常工作:
int main ()
{
int a = 5,b = 2;
printf("%d",a++ + ++b);
return 0;
}
发布于 2018-04-24 19:55:05
printf("%d",a+++++b);
被解释为(a++)++ + b
根据最大的蒙克法则!。
++
(后缀)不计算为一个,lvalue
但它需要它的操作数是一个lvalue
。
!6.4 / 4说,下一个预处理令牌是可以构成预处理令牌的最长字符序列“
发布于 2018-04-24 21:11:17
普通的词法分析器很不好用,所以你的代码被解释为
a++ ++ +b
解析器的输入是一串符号,所以你的代码就像这样:
[ SYMBOL_NAME(name = "a"),
SYMBOL_PLUS_PLUS,
SYMBOL_PLUS_PLUS,
SYMBOL_PLUS,
SYMBOL_NAME(name = "b")
]
解析器认为语法错误:
a+++b
是 :
a++ +b
https://stackoverflow.com/questions/-100003970
复制相似问题