c – 易混乱和双重混乱

前端之家收集整理的这篇文章主要介绍了c – 易混乱和双重混乱前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
int x = 2;
volatile int y = 2;

const int z = x/y;

int main(){
    int x = 2 + 3;

    double d = 7 / 3;
}

我这里有三个问题:

首先,在这种情况下,编译器可以在编译时计算’z’的值为1吗?

其次,我观察到编译器不生成用于添加2和3来初始化x的汇编指令.它用5直接初始化x.用’d’可以做同样的事情吗?

第三,有没有关于这两个概念的好书?标准中的任何引用都会有所帮助(标准文档似乎是一个有趣的地方,虽然非常可怕)

解决方法

Firstly,can the compiler calculate the value of the ‘z’ at compile time to be 1 in this case?

读取或写入被认为具有副作用的volatile变量,因此不允许编译器执行此操作.

Secondly,I observed that the compiler does not generate assembly instructions for adding 2 and 3 to initialize x. It directly initializes x with 5. Can the same be done with ‘d’?

是.只要编译器可以证明没有副作用.例如.如果在计算过程中发生溢出或除零,则无法在编译时计算它,因为计算应在运行时触发cpu异常.

Thirdly,Is there any good book to read on these two concepts?

是. C ISO标准准确描述了您的要求.书籍很好地学习基础知识或理论.编写重新标记标准中描述的所有技术细节的书籍是没有意义的.

猜你在找的C&C++相关文章