gpt4 book ai didi

c++ - g++ 空函数删除是否递归工作?

转载 作者:行者123 更新时间:2023-11-28 07:14:14 26 4
gpt4 key购买 nike

据我所知,在以下情况下,打开优化的 g++ 将完全删除对 bar 的函数调用:

int bar() { }    
int foo() { bar(); }

但是,请考虑以下两种情况,bar 的定义如上:

案例一:

int foo(int a, int b) {
if (a > b) bar();
}

案例二:

int foo() { bar(); }
int foo2() {foo(); }

在情况 1 中,if 语句是否也会被删除,因为即使条件为真,它也会执行死代码?

在情况 2 中,是否会删除 foo2 中对 foo 的调用?

最佳答案

按照评论中的建议,我自己尝试了这个,看来在我描述的两种情况下,空函数调用确实被递归和完全删除,至少对于 gcc 4.8 是这样。 1g++ 4.8.1

我编译了以下两个程序,首先使用 gcc -S,然后使用 gcc -S -O2

程序 1:

int bar() { }
int foo() { bar(); }
int main() {
foo();
}

程序 2:

int bar() { }

int foo(int a, int b) {
if (a > b) bar();
}

int main() {
foo(2,1);
}

我还尝试使用从命令行传入的 foo 参数,以确保删除不是因为传递给 foo 的常量。

int main(int argc, char** argv) {
foo(argc,1);
}

关于c++ - g++ 空函数删除是否递归工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20468447/

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