1)我已经读过很多次关于 C 中未定义行为的内容。那是关于:C 在其定义中没有说明的一些行为,因此每个编译器都会有它们的实现,但不会违反 C 标准。例子是:x= ++y*4 + ++y*3
。
但是,这里的任何人都可以给我两个给出不同结果的编译器吗?我有兴趣用它来测试。(在我的机器上,我只有 mingw)
2) 而且,C 没有说明+ - * /
操作顺序。例如:1*2 + 3 + 4*5
。* /
将首先计算,但我们不知道它的另一个。
所以根据下面的例子:如果我们有:
int a, b, c;
// assign value for a,b,c
float result = a*b/c; // wrong
float result = (float)a*b/c; // seem true
但是,b/c
仍然可以先计算,所以答案是错误的。所以,真正的类型转换应该是:
float result = a*b/(float)c
但是,几乎所有关于 C 的书籍,所有编写 C 的人,总是使用 : (float)a*b/c
。总是如此,还是他们相信“普通编译器”会像我们经常想的那样从左到右解决?
请让我更清楚地了解这一点。
谢谢 :)