#define在C中的效率

Nat*_*han 2 c performance

我是C的新手,并且想知道哪个是更有效或首选的方式来编程以下内容:

选项A:

#define flag true

void Foo()
{
   for (size_t i = 0; i < veryBigNumber; i++)
   {
      if (flag)
         doSomething1();
      doSomething2();
   }
}
Run Code Online (Sandbox Code Playgroud)

选项B:

#define flag

void Foo()
{
   for (size_t i = 0; i < veryBigNumber; i++)
   {
#if defined(flag)
         doSomething1();
#endif
      doSomething2();
   }
}
Run Code Online (Sandbox Code Playgroud)

PSk*_*cik 5

除非你是一个非常古老/愚蠢的编译器,否则它们应该是等价的. #if保证在编译时进行评估,但是任何现代编译器都会在编译时if使用整数常量来计算常规.


(无论如何,你距离发现自己只有一步之遥.只需要在veryBigNumber这两个变种中加入一个非常大的数字和时间.如果非常大的数字真的非常大(数百万,数十亿)甚至可以在外部计时(time ./a.out从命令行)应该给你相当可靠的时间.)