为什么SGI stl源代码使用#if 0?

时间:2014-04-03 07:39:32

标签: c++ stl

在SGI源代码文件的iterator.h文件中,第67行:

#if 0
using __STD::iterator;
#endif

为什么标准模板库编码器会这样写?声明另一个宏并不是更好,并将其用作测试条件,如:

#define STD_ITERATOR
#ifndef STD_ITERATOR
using __STD::iterator;
#endif

为什么用粗鲁 #if 0编写硬编码?

1 个答案:

答案 0 :(得分:2)

#if 0通常用于删除某些内容,但您不确定是否真的要删除它,因此请将其保留在#if 0内,以便您可以将其删除再次回来。

添加额外#define XX并使用#ifndef会导致“namepolution”,当您因某些原因需要在自己的代码中使用STD_ITERATOR作为宏或名称时会有点恼人,只是发现它在你碰巧使用的标题中被定义为什么都没有,完全没有理由。

(将#if 0留在“释放”代码中并不是一种非常好的风格 - 它应该是一个临时措施,一旦你“确定”不需要它就应该删除。

#if 0的另一个非常好的用途是用于故障排除 - 例如你知道你的代码在函数X中崩溃,但不是在那里,并且函数X非常大。所以把#if 0放在函数的一半左右,如果它没有崩溃,你知道它在if'd out位。 [显然需要小心谨慎,因为代码不会因为你现在已经取出一些关键部分而中断!]