ИНФОРМАЦИЯ: # define необходимо оценить для Integer Const для выражения # IF

ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.

Эта статья на английском языке:69934
Эта статья помещена в архив. Она предлагается "как есть" и обновляться не будет.
Аннотация
При использовании # определять инструкцию, чтобы определить константу, его значение должно оцениваться относительно целочисленная константа, если предполагается использовать его как выражение в #, # if или # elif еще директивы компилятора. Кроме того для можно использовать любой не определена константа препроцессор предполагается нулевое значение.

Если вы не уверены, каким образом компилятор обрабатывает некоторые директивы, можно компилировать код с помощью одного из вариантов предварительной обработки (/P /EP/e). Это позволит увидеть точное директивы препроцессора в коде.
Дополнительная информация
При использовании # define'd константу, которая не выполняет вычисления целочисленная константа с #, # if или # elif директивы компилятора else, появляется следующее сообщение об ошибке:
Неустранимая ошибка C1017: недопустимые целочисленные константное выражение
> Например, эта ошибка возникает с следующий фрагмент кода:
   #define CONSTANT_NAME "YES"   #if CONSTANT_NAME   ...   #endif				


Поскольку CONSTANT_NAME оценивается как строковая константа, а не целочисленная константа, директива # If ошибку C1017 и останавливает компилятор.

Другие важные ситуация вычисляется любой константу, которая не определена препроцессор равен нулю. Если не определена константа случайно, может привести к неожиданным поведением. Например в следующем фрагменте кода, результатом является то, что фактически предназначен в обратном направлении:

#define CONSTANT_NAME YES#if CONSTANT_NAME   Code to use on YES...#elif CONSTANT_NAME==NO   Code to use on NO...#endif				


В этом примере Да не определен, так что он является ноль. Таким образом CONSTANT_NAME также равно нулю. Таким образом выражение # If "CONSTANT_NAME" оценивается как false и "код для использования в состояние" удаляется, препроцессор, что не очевидно, что предполагаемое поведение. Кроме того поскольку нет является также не определен, его также равно нулю, что означает, что выражение # elif "CONSTANT_NAME == нет» имеет значение true (0 == 0). В этом случае препроцессора не для удаления "код для этого на Нет", который тоже не предполагаемого поведения.

При компиляции с одним из вариантов предварительной обработки (/P /EP/e), можно просмотреть выходные данные препроцессора для просмотра, точно так же как препроцессор анализ всех директив. Для получения дополнительных сведений об этих параметрах обратитесь к документации или интерактивной справки, прилагаемый к конкретной версии компилятора.

Внимание! Эта статья переведена автоматически

Свойства

Номер статьи: 69934 — последний просмотр: 02/21/2014 00:26:18 — редакция: 2.0

Microsoft Visual C++ 1.5 Professional Edition, Microsoft Visual C++ 2.0 Professional Edition, Microsoft Visual C++ 5.0 Enterprise Edition, Microsoft Visual C++ 5.0 Professional Edition

  • kbnosurvey kbarchive kbinfo kblangc kbmt KB69934 KbMtru
Отзывы и предложения