Подтвердить что ты не робот

Компилятор старого C компилятора на #ifndef #define

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

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

#ifndef SOMETHING
#define SOMETHING

...  

#endif /* SOMETHING */

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

Переход на #define SOMETHING 1 не изменил.

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

Литература:

4b9b3361

Ответ 1

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

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

Ответ 2

#if SOMETHING
#else




#endif

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