微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

原文地址:https://www.jb51.cc/c/119234.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐