在SGI源代码文件的iterator.h
文件中,第67行:
#if 0
using __STD::iterator;
#endif
为什么标准模板库编码器会这样写?声明另一个宏并不是更好,并将其用作测试条件,如:
#define STD_ITERATOR
#ifndef STD_ITERATOR
using __STD::iterator;
#endif
为什么用粗鲁 #if 0
编写硬编码?
答案 0 :(得分:2)
#if 0
通常用于删除某些内容,但您不确定是否真的要删除它,因此请将其保留在#if 0
内,以便您可以将其删除再次回来。
添加额外#define XX
并使用#ifndef
会导致“namepolution”,当您因某些原因需要在自己的代码中使用STD_ITERATOR
作为宏或名称时会有点恼人,只是发现它在你碰巧使用的标题中被定义为什么都没有,完全没有理由。
(将#if 0
留在“释放”代码中并不是一种非常好的风格 - 它应该是一个临时措施,一旦你“确定”不需要它就应该删除。
#if 0的另一个非常好的用途是用于故障排除 - 例如你知道你的代码在函数X中崩溃,但不是在那里,并且函数X非常大。所以把#if 0放在函数的一半左右,如果它没有崩溃,你知道它在if'd out位。 [显然需要小心谨慎,因为代码不会因为你现在已经取出一些关键部分而中断!]