2015-04-22 7 views
0

Работа над ошибками и предупреждениями препроцессора я обнаружил следующее:C директива ошибки определяется поведение

При использовании

#define TEST 4 
#ifdef TEST 
    #error "Wrong Test" 
#endif 

Он покажет ошибку во время компиляции, однако с помощью

#define TEST 4 
#if (TEST==3) 
    #error "Wrong Test" 
#endif  

Воли все еще показывают ошибку, чего не ожидается. Изменение #error директива с #warning все работает как ожидалось.

Может кто-нибудь объяснить, как обойти эту проблему, поскольку в нашем процессе компиляции мы останавливаемся на ошибках, а не на предупреждениях.

+1

Возможный дубликат [Есть ли способ проверить макрос и определить его значение одновременно) (http://stackoverflow.com/questions/17160755/is-there-a- way-to-both-check-a-macro-is-defined-and-it-equals-a-defined-value-at) – FalconUA

+3

Какой компилятор вы используете? Это работает правильно для меня с gcc. –

+0

Аноним мой компилятор - это рука gcc 4.8.1. Однако я отвлек тестовый пример, и действительно этот случай работает, но в моем исходном файле он, похоже, не работает. Я вернусь к этому – EmbedWise

ответ

0

ОП писал:

Теперь я Выделенный пример все работает отлично. Построив его, вы обнаружите ошибку. Мы используем -D аргументы для gcc для определения переменной, например. КОНТРОЛЬНАЯ РАБОТА. И в другом файле эта же переменная устанавливается, когда она не определена. Во время фаз препроцессора значение изменяется от значения, которое не определено до -D. Это также выглядит так: #error и #warning директивы работают на разных этапах предварительной обработки. Обобщенная проблема решена, спасибо за комментарии!

+0

([Ответил в комментарии и преобразован в сообщество wiki] (http://meta.stackoverflow.com/questions/251597/question-with-no-answers-but-issue-solved-in-the-comments)) –