Использование #define для определения и #if для определения, определено ли оно - PullRequest
0 голосов
/ 04 ноября 2010

gcc 4.4.4 c89

Я пытаюсь что-то определить. Если это определено, я хочу сделать что-то, иначе я хочу сделать что-то другое.

#define PARSE_STRING
    for(i = 0; i < NUMBER_OF_STRINGS; i++) {
#if defined (PARSE_STING)
    /* run code for parsing the strings */
#else
    /* run code that doesn't parse the strings
    }
#endif

Когда я пробую приведенный выше код в своей функции, я, похоже, получаю другие ошибки в другом месте моего кода. Однако, если я закомментирую #define PARSE_STRING, он скомпилируется нормально. Мне просто интересно, мне нужно #define PARSE_STRING?

Большое спасибо за любые предложения,

====== РЕДАКТИРОВАТЬ с обновленным решением

Может быть, лучше сделать это таким образом?

#define PARSE_STRING
    for(i = 0; i < NUMBER_OF_STRINGS; i++) {
#if defined (PARSE_STRING)
    /* run code for parsing the strings */
#elif defined (NO_PARSE_STRING)
    /* run code that doesn't parse the strings
#endif
    }

Ответы [ 3 ]

7 голосов
/ 04 ноября 2010

Вы смешали чередование директив предварительной обработки с началом и концом тела функции:

}
#endif

Вероятно, должно быть

#endif
}
2 голосов
/ 04 ноября 2010

Вы включили конечную скобку для цикла for в одно из условий

#else
  }
#endif

Должно быть

#else
   //Stuff
#endif
}
2 голосов
/ 04 ноября 2010

Это потому, что если оно определено, у вас не будет закрывающего }, что будет синтаксической ошибкой.

...