gpt4 book ai didi

c - 是否允许 C 编译器优化冗余语句?

转载 作者:行者123 更新时间:2023-12-02 05:42:35 25 4
gpt4 key购买 nike

C 中有许多语句什么都不做。这意味着删除它们不会对程序行为产生任何可观察到的变化。

根据C标准,C编译器是否允许优化掉这些冗余语句?

例如,如果我们有这样的代码:

#include <stdio.h>

void f(void);

int main(void){

printf("a");
f(); // function call statement that provably does nothing

printf("b");
1000; // redundant expression statement

printf("c");
; // null statement

printf("d");
int x = 1; // assignment statement that is not used

printf("e");

return 0;
}

void f(void){
1000; // redundant expression statement
; // null statement
int x = 1; // assignment statement that is not used
}

是否允许编译器生成与下面相同的目标代码? :

#include <stdio.h>

void f(void);

int main(void){
printf("a");
printf("b");
printf("c");
printf("d");
printf("e");
return 0;
}

void f(void){
}

最佳答案

早在 80 年代,我的一个 friend 告诉我他写了一个程序来执行算法来计算 pi,然后将它打印出来。

当他查看编译后的exe文件时,惊奇地发现编译器基本上已经产生了:输出3.14159

简而言之,C(或任何其他语言)编译器可以做任何不改变程序行为的事情。

这也适用于 Java 等,其中 JVM 使用多种技术来提高速度(例如,“展开”循环以便代码按顺序执行而无需经过循环开销等)

关于c - 是否允许 C 编译器优化冗余语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19510271/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com