哪个执行时间少,为什么?

时间:2018-03-23 07:03:05

标签: c compilation preprocessor

1. 
int main() { int a; a = 0; }
//OR 
2. 
#define ZERO 0 int main() { int a; a = ZERO; }

我认为第二个需要较少的执行时间,因为它是预处理的。

2 个答案:

答案 0 :(得分:1)

一个班轮 - 编译时间和执行时间完全是不同的指标!!

任何以中高级语言编写的程序都不会被系统执行 as-is 。对于C,它是编译器,它将源文件作为输入并生成二进制(机器可执行代码)。在此过程中,它将大量优化合并到代码中。

在这种情况下,最有可能的是,编译器会完全优化语句,因为它们不是有意义地使用。两个片段都可能生成相同的二进制文件(除非您强行关闭优化)。如果有的话,你必须检查生成的二进制文件并执行时间测量以检查最终结果。

答案 1 :(得分:1)

他们是平等的。编译器的预处理器在执行任何操作之前只需替换ZERO

假设它是这样写的:

#define ZERO 0 
int main() { int a; a = ZERO; }

该程序将转换为

int main() { int a; a = 0; }

在编译之前不会达到优化步骤。

<强>更新 只是为了澄清,有时您会看到这样的代码:

#define ERROR_MEMORY_ALLOCATION_FAILED -1

char *buf = malloc(10);
if (!buf)
    return ERROR_MEMORY_ALLOCATION_FAILED;

这有助于编写可读性,特别是在重用这些定义时。