Почему код между ifndef / endif все еще может запускаться здесь? - PullRequest
0 голосов
/ 18 июля 2010
#define cimg_use_jpeg 2

#ifndef cimg_use_jpeg

//code goes here

#endif

Я действительно не понимаю ...

Ответы [ 5 ]

6 голосов
/ 18 июля 2010

Каждый раз, когда подобные вещи (так называемые невозможные вещи) случаются со мной, причина в том, что код, который я вижу в моем редакторе, не тот код, который выполняется.Это может происходить разными способами.

  • забыть сделать
  • забыть сохранить
  • сохранить копию кода
  • , работающего в другомокружение от того, что вы скомпилировали для
  • , новый код работал, но я открыл и смотрю на старый вывод
1 голос
/ 18 июля 2010

Не может быть выполнено.Возможно, вы запускаете неверную исполняемую версию.Печать __DATE__ и __TIME__ для отслеживания или регистрации помогает обнаружить такие ошибки.

0 голосов
/ 18 июля 2010

@ Андерс К. Это работает, то есть правильные вещи не выполняются.Код выдает "БАЗ не определен"

#define FOO 2
#define BAR

int main(int argc, char* argv[])
{
#ifndef FOO
  std::cout << "FOO is undefined" << std::endl;
#endif

#ifndef BAR
  std::cout << "BAR is undefined" << std::endl;
#endif

#ifndef BAZ
  std::cout << "BAZ is undefined" << std::endl;
#endif
}
0 голосов
/ 18 июля 2010

Это должно определенно работать, как вы ожидаете.Код в блоке #ifndef/#endif даже не будет скомпилирован компилятором, если предположить, что cimg_use_jpeg определен как ожидалось.

Итак, вопрос в том, определен ли cimg_use_jpeg так, как вы ожидаете?Или вы упрощаете свой вопрос и в силу упрощения предоставляете пример, который действительно работает?

0 голосов
/ 18 июля 2010

Либо вы пишете

#define yoursymbol

#ifdef yoursymbol

, либо вы пишете

#define yoursymbol somevalue

#if yousymbol == somevalue

не смешивайте их

РЕДАКТИРОВАТЬ: так как люди, кажется, неправильно понимают, что я имел в виду, вотпояснение: когда вы программируете, важно кодировать так, чтобы другие люди понимали ваши намерения, поэтому, если ваше намерение состоит только в том, чтобы проверить, определен ли символ, сложно указать числовое значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...