gpt4 book ai didi

c - 为什么 GCC 保留空函数?

转载 作者:太空狗 更新时间:2023-10-29 16:35:14 28 4
gpt4 key购买 nike

在大多数情况下,如果我想在 C 中创建一个可选功能,我只需创建两个这样的函数:

#ifdef OPTIONAL_SOMETHING
void do_something(int n, const char *s)
{
while (n--) {
printf("%s", s);
}

/* ...You might get the point, really do something... */
}
#else
void do_something(int n, const char *s)
{
/* Empty body */
}
#endif

因此,如果符号未定义——当该功能被禁用时——一个空函数将被编译到可执行文件中。

深入研究程序集列表,GCC 似乎在优化被禁用编译并调用 空函数。如果启用了优化,还有 -O2-O3,它只编译必要的堆栈处理代码,但它优化出通话说明。总而言之,它保持了功能。

对于非空但未使用的方法大致相同。

它应该简单地丢弃整个东西,但它没有。为什么这是默认行为?只是出于好奇:我怎样才能消除它?

最佳答案

由于该函数具有外部链接(不是static),编译器无法消除它,因为另一个目标文件可能会引用它。如果函数是static,它将被完全消除。

关于c - 为什么 GCC 保留空函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10049981/

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