为什么 C 语言要求在 if 语句中围绕简单条件进行 parens?

2022-09-01 12:45:45

这听起来很愚蠢,但多年来,我无法提出一个需要这个的用例。快速的谷歌搜索没有发现任何有价值的东西。

从记忆中可以看出Bjarne Stroustrup提到的一个用例,但我找不到对它的引用。

那么为什么你不能在C语言中拥有这个:

int val = 0;
if val
  doSomehing();
else
  doSomehinglse();

我可以接受“我们不能为词法分析器添加支持而烦恼”的原因,我只是想弄清楚这种语法是否破坏了其他语言结构。考虑到C / C++中有多少古怪的语法功能,我几乎不认为这会增加很多复杂性。


答案 1

如果构造中的表达式周围没有括号,那么以下语句的含义是什么?if

if x * x * b = NULL;

是吗

if (x*x)
    (*b) = NULL;

还是

if (x)
    (*x) * b = NULL;

(当然,这些都是愚蠢的例子,甚至由于明显的原因而不起作用,但你明白了)

TLDR:C中需要括号,以消除任何语法歧义的可能性。


答案 2

告诉我如何插入以下内容:

if x ++ b;

看起来很傻,但是...

if( x ) ++b;

if( x++ ) b;

或者也许“x”有一个重载的运算符,然后...

if( x ++ b){;}

编辑:

正如 Martin York 所指出的,“++”具有更高的优先级,这就是为什么我必须添加运算符重载花絮的原因。在处理现代编译器时,他是绝对正确的,直到你允许所有C++带来的重载善。