Где законно указывать директиву препроцессора?

Я пытаюсь написать конечный автомат, который обрабатывает исходный файл и разбивает его на разделы, которые являются либо бизнесом компилятора, либо бизнесом препроцессора. Не глубокий обход, я просто ищу разделы, которые являются либо комментариями, либо директивами препроцессора. (без макросов, без условно скомпилированных блоков и т. д.)

Комментарии достаточно просты, но я не уверен на 100%, где законно указывать директиву препроцессора. Например, допустима ли следующая строка?

int i; #include <derp.h>

Существуют ли особые случаи, когда некоторые директивы разрешены, а другие нет?

Я искал Google и SO и не нашел вопрос, который отвечает на это.

Пожалуйста, ответьте за ОБА и С ++, я пометил как сознательно, так и намеренно.

1 ответ

Решение

Директивы препроцессора могут появляться где угодно, если они являются первым токеном без пробелов в строке. Соответственно, вы не можете написать

int i; #define ThisIsntLegal SinceItsNotAtTheStart

Но это будет:

int i;
#define Woohoo ThisIsLegal

Надеюсь это поможет!

Стандарт C11 (N1570, ISO / IEC 9899: 201x) (Соответствующий раздел: S6.10 Директивы по предварительной обработке, стр. 160)

Другие вопросы по тегам