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

Переводы статьи Переводы статьи
Код статьи: 69934 - Vizualiza?i produsele pentru care se aplic? acest articol.
Эта статья помещена в архив. Она предлагается "как есть" и обновляться не будет.
Развернуть все | Свернуть все

Аннотация

При использовании # определять инструкцию, чтобы определить константу, его значение должно оцениваться относительно целочисленная константа, если предполагается использовать его как выражение в #, # 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 - Последний отзыв: 21 февраля 2014 г. - Revision: 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
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:69934

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com