为什么有人会使用#if 1 C预处理器指令?

Pet*_*mit 16 c-preprocessor preprocessor-directive

我正在查看一些C源代码,我不明白以下部分

#if 1

   typedef unsigned short PronId;
   typedef unsigned short LMId;
#  define LM_NGRAM_INT

#else

   typedef unsigned int LMId;
   typedef unsigned int PronId;
#  undef LM_NGRAM_INT

#endif
Run Code Online (Sandbox Code Playgroud)

有人会这样做#if 1吗?难道只有第一个块会被处理吗?

Jam*_*ran 21

是..只处理第一个块---直到有人将1更改为0.然后将编译另一个块.这是在测试不同算法时临时切换代码块的便捷方式.


ken*_*ytm 18

这样就可以通过更改#if 1to 来快速选择要编译的部分#if 0.


P S*_*ved 6

软件的一个基本属性是计算机程序修改起来很便宜.

这就是为什么某些代码的编写方式会使修改变得更容易.这就是他们需要各种模式的原因,比如"界面"或"代理".

这就是为什么你有时会看到奇怪的结构#if 1- 例如#else- #endif,其唯一的目的是通过微小的努力轻松切换将要编译的代码部分:将1更改为0.

  • 我喜欢这句话:“修改计算机程序很便宜” (3认同)

Rob*_*ert 5

当我需要测试不同的参数集时,我把它放在我的代码中.通常我的产品将提供与我在调试环境中使用的默认值不同的默认值,因此我将出货默认设置放在#if 1中,调试默认设置在#else中,带#warning警告我它是使用调试构建的默认值.