Старый компилятор C душит #ifndef #define - PullRequest
13 голосов
/ 17 ноября 2011

Я пытаюсь перенести некоторый относительно современный код C на старый компилятор.

Этот компилятор ( DICE ), похоже, душит первый заголовочный файл и первое появление этой идиомы:

#ifndef SOMETHING
#define SOMETHING

...  

#endif /* SOMETHING */

он умирает во второй строке заголовка с: DCPP: "../../code/someheader.h" L:2 C:0 Error:39 Syntax Error

Изменение на #define SOMETHING 1 не изменило.

Итак, у меня действительно два вопроса, использую ли я DICE с неправильной опцией или чем-то еще, или Использовали ли программисты на С какой-то другой идиом, равный ifndef-define, в прежние времена?

Ссылки:

Ответы [ 2 ]

16 голосов
/ 17 ноября 2011

Если это этот компилятор C , то, взглянув на sources (src \ dcpp \ cpp.c), вы увидите, что символы новой строки содержат только символ возврата каретки, а несимвол перевода строки.

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

3 голосов
/ 17 ноября 2011
#if SOMETHING
#else




#endif

может работать везде

...