1.
int main() { int a; a = 0; }
//OR
2.
#define ZERO 0 int main() { int a; a = ZERO; }
我认为第二个需要较少的执行时间,因为它是预处理的。
答案 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;
这有助于编写可读性,特别是在重用这些定义时。