考虑以下简短C
程序:
#include <math.h>
#include <stdio.h>
#define K 20
// int K = 20;
int main() {
printf("%f\n", sqrt(K));
}
Run Code Online (Sandbox Code Playgroud)
如给定的那样,该程序使用进行编译gcc Foo.c
,并产生正确的输出。
但是,如果我们#define
在行中注释掉并在行中注释int K = 20
,则将得到的编译时错误undefined reference to sqrt'
,只能通过使用进行修复gcc Foo.c -lm
。
我gcc 4.7.3
继续Ubuntu 13.04
。
在编译过程中,编译器确定您正在以常量常量作为唯一参数调用函数。因此,它可以通过替换函数调用的结果来进行优化。
它在编译时计算sqrt。请注意,在您的注释中建议不要将其注入代码以在运行时进行计算。
当然,编译器只能对某些功能执行此操作。
优化之后,无需在运行时调用sqrt,因此,如果未链接它,则不会出现错误。
归档时间: |
|
查看次数: |
968 次 |
最近记录: |