2017-02-22 9 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

Спасибо, ребята, моя догадка была тогда. Извините, что я пропустил это, прежде чем меня спросили (мое недоразумение. –

Смежные вопросы