为什么在 C 中进行类型转换需要括号?

E.N*_*N.D 0 c

在 C 中,您可以像这样进行类型转换:

double d = 1.008;   
int i = (int)d;
Run Code Online (Sandbox Code Playgroud)

为什么括号是强制类型转换的?是因为优先顺序吗?C的创造者在这背后的思维过程和逻辑是什么?

我很好奇为什么编译器可以消除许多其他事情的歧义,但是通过类型转换,括号是强制执行的。

Era*_*lon 6

int main()
{
    char c;
    (int)c; // int c; if no parentheses were needed
}
Run Code Online (Sandbox Code Playgroud)

这是完全有效的 C。现在想象一下不需要括号,然后可以将强制转换解释为声明和强制转换。


eer*_*ika 5

让我们假装它们不是必需的。看这个:

int*d
Run Code Online (Sandbox Code Playgroud)

这是转换int,而单目运算符*适用于d,或者是这个转换int*

这个怎么样:

unsigned int 4.2
Run Code Online (Sandbox Code Playgroud)

是将 4.2int转换为然后转换为unsigned吗?还是将 4.2 转换为unsigned int

归根结底,如何解决歧义是一种设计选择。一种方法是应用“最大咀嚼”,另一种方法是指定所有歧义都是格式错误的,在这种情况下选择的方法是指定语法,以便没有歧义。