Где законно указывать директиву препроцессора?
Я пытаюсь написать конечный автомат, который обрабатывает исходный файл и разбивает его на разделы, которые являются либо бизнесом компилятора, либо бизнесом препроцессора. Не глубокий обход, я просто ищу разделы, которые являются либо комментариями, либо директивами препроцессора. (без макросов, без условно скомпилированных блоков и т. д.)
Комментарии достаточно просты, но я не уверен на 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)