|
|
1
9
在一般情况下,编译器很难确切地知道函数可以访问哪些对象,因此可能会进行修改。在某一点上
例如,可能有
即使没有
注意你的
自从
注意,在您的第一个例子中,即使我在上面的段落中提到的仍然是正确的,编译器仍然可以优化对
事实上,这里有一些C99所说的关于抽象机器在这些精确的情况下的行为:
最后,您应该注意,c99标准还规定:
严格地说
|
|
|
2
4
因为打电话给
|
|
|
3
3
gcc可能假设调用
看看 pure 函数属性,它声明函数对全局状态没有副作用。我怀疑如果用对“纯”函数的调用替换putchar(),gcc将重新引入循环优化。 |
|
|
4
1
谢谢大家的回答和评论。他们很有帮助,但没有一个提供完整的故事。[ 编辑 :michael burr的答案是肯定的,这有点多余。]我在这里总结一下。
尽管
假设
所以在什么情况下
可以
这个
这解释了为什么忘记
|
|
|
5
1
理论上,只有链接时间分析才能确定它不是。 |
|
Doohyeon Won · 内联函数上的奇怪现象?[关闭] 1 年前 |
|
|
MysteryMoose · GCC下故意忽略初始化器警告中的过量元素 1 年前 |
|
|
Ken P · 如何利用[*]printf格式类型规范警告? 1 年前 |
|
fghoussen · 在C结构体中,为什么打包、对齐似乎会进行填充? 1 年前 |
|
|
adversarr · 全局变量何时导出到可执行文件? 1 年前 |