Áko*_*ács 14 c macros optimization gcc function
在大多数情况下,如果我想在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
Run Code Online (Sandbox Code Playgroud)
因此,如果符号未定义 - 禁用该功能时 - 将空函数编译到可执行文件中.
深入到汇编列表中,似乎GCC 在禁用优化时编译并调用空函数.如果启用了优化,也使用和,它只编译必要的堆栈处理代码,但它会优化调用指令.总而言之,它保留了功能.-O2-O3
大约相同的情况适用于非空但未使用的方法.
它应该简单地扔掉整个东西,但事实并非如此.为什么它是默认行为?只是为了好奇:我怎么能消除这个?
Jon*_*ler 26
由于该函数具有外部链接(不是static),编译器无法消除它,因为另一个目标文件可能引用它.如果功能是static,它将被完全消除.
| 归档时间: |
|
| 查看次数: |
3154 次 |
| 最近记录: |