2017-02-22 28 views
-1

现在我又混淆了。 在我们以前的C代码中,我发现了一些奇怪的部分,似乎是打印到终端的转储函数,我不知道是否可以解释为什么使用“#if 0”?“#if 0 ... #endif”声明的目的是什么

我的猜测是,这是注释掉的代码的老办法....

#if 0 
dump(b, cnt) 
    char *b; 
    int cnt; 
{ 
    int i; 

    if (cnt == 0) 
    return; 

    for (i=0; i < cnt; i++, b++){ 
    if ((i % 16) == 0) 
     printf("\n"); 
    printf("0x%02x ", *b); 
    } 
} 
#endif 
+2

它允许您轻松启用/禁用一段代码(例如,用于测试目的)。 –

+0

而你需要考虑的不等于评论。 –

回答

1

这不是一个“老办法”,这是一个独立的方式。这使用预处理器剪切包含的行,所以编译器从不会看到它们。

这是一种“特征切换”的极端形式;往往你看到这样

#if defined SOME_HANDY_FEATURE 
void use_some_handy_feature(int handyness) 
{ 
    ... 
} 
#endif 

但这里的#define代码由字面0这当然是假的替换,所以代码块被删除。

即使删除的代码包含注释,它也能正常工作,因为它们不会嵌套,所以正常的/* ... */注释并不适用。

+0

谢谢你们,我的直觉是正确的。对不起,我错过了之前曾被问过;(我的错误。 –