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

Why do SGI stl source code use #if 0?

本文关键字:#if 源代码 SGI stl 为什么      更新时间:2023-10-16

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

#if 0
using __STD::iterator;
#endif

为什么标准模板库编码器以这种方式编写?声明另一个宏并将其用作测试条件不是更好吗:

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

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

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

添加额外的#define XX并使用#ifndef会导致"namepolution",当您出于某种原因需要在自己的代码中使用STD_ITERATOR作为宏或名称时,这有点烦人,只是发现它在你碰巧使用的标头中被定义为任何内容,根本没有充分的理由。

(在"发布"代码中保留#if 0并不被认为是非常好的风格 - 它应该是一个临时措施,一旦你"确定"不需要它,就应该删除)。

#if 0 的另一个很好的用途是用于故障排除 - 例如,你知道你的代码在函数 X 中崩溃,但不是在何处崩溃,并且函数 X 非常大。因此,在函数的一半周围放一个 #if 0,如果它没有崩溃,你就知道它在if'd out位。[显然要小心一些,这样代码就不会仅仅因为您现在已经删除了一些关键部分而中断!