(#ifdef) 与 (#define <boolean>)
(#ifdef) vs. (#define <boolean>)
我想弄清楚哪种做法最好:
#define TEST
//#define TEST commented if not used or simply deleted
#define TEST 1
#define TEST 0 //if not used
为了可读性,我更喜欢定义一个 "Boolean" 并在 if
中检查它,但我想它效率不高,因为它不使用 #ifdef
而它需要每次都在 if
中检查
很久以前,一些编译器(如果我没记错的话,一个是用于 Solaris 的)无法正确编译使用第一个片段的代码。
但 C 标准(现在)要求他们这样做,因此使用第二种方式完全没有任何好处,现在可以将其视为特殊方式。
当然,如果您需要 TEST
是一个数值,例如在条件检查中而不是仅仅使用 #ifdef
,那么您需要使用第二种方式。
虽然您不能在第二种情况下使用 #ifdef
,但您绝对可以使用 #if
,因此 TEST 0 不会产生额外的运行时成本。顺便说一句。也意味着你可以有多个不同的测试值,可能对应于不同的日志级别或类似的东西
(按照 Bathsheba 的建议发表我的评论作为答案)
我想弄清楚哪种做法最好:
#define TEST
//#define TEST commented if not used or simply deleted
#define TEST 1
#define TEST 0 //if not used
为了可读性,我更喜欢定义一个 "Boolean" 并在 if
中检查它,但我想它效率不高,因为它不使用 #ifdef
而它需要每次都在 if
很久以前,一些编译器(如果我没记错的话,一个是用于 Solaris 的)无法正确编译使用第一个片段的代码。
但 C 标准(现在)要求他们这样做,因此使用第二种方式完全没有任何好处,现在可以将其视为特殊方式。
当然,如果您需要 TEST
是一个数值,例如在条件检查中而不是仅仅使用 #ifdef
,那么您需要使用第二种方式。
虽然您不能在第二种情况下使用 #ifdef
,但您绝对可以使用 #if
,因此 TEST 0 不会产生额外的运行时成本。顺便说一句。也意味着你可以有多个不同的测试值,可能对应于不同的日志级别或类似的东西
(按照 Bathsheba 的建议发表我的评论作为答案)