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
吗?难道只有第一个块会被处理吗?
软件的一个基本属性是计算机程序修改起来很便宜.
这就是为什么某些代码的编写方式会使修改变得更容易.这就是他们需要各种模式的原因,比如"界面"或"代理".
这就是为什么你有时会看到奇怪的结构#if 1
- 例如#else
- #endif
,其唯一的目的是通过微小的努力轻松切换将要编译的代码部分:将1更改为0.
当我需要测试不同的参数集时,我把它放在我的代码中.通常我的产品将提供与我在调试环境中使用的默认值不同的默认值,因此我将出货默认设置放在#if 1中,调试默认设置在#else中,带#warning警告我它是使用调试构建的默认值.