при включении библиотек c строка не заканчивается точкой с запятой, в то время как другие операторы делают. в чем причина этого?
Почему включить строки не заканчиваются точкой с запятой?
Ответ 1
По той же причине #define макросов нет - они предназначены для препроцессора, который расширяет такие вещи, как include и определяет, прежде чем сам компилятор возьмет верх.
Ответ 2
Строкиначинающиеся С#, не являются частью языка C, это инструкции для предварительного процессора. Когда он был впервые разработан, полуколоны просто не требовались.
Ответ 3
"... в то время как другие утверждения делают".
Во-первых, директивы препроцессора не являются инструкциями. Заявление - это сущность, которая существует только на синтаксическом/семантическом уровне. Директивы препроцессора обрабатываются на относительно ранних этапах перевода, прежде чем начнется какой-либо синтаксический анализ, поэтому на этом этапе еще нет такой вещи, как "выражение". И по этой причине нет никакого содержательного обоснования, требующего прекращения директивы #include
точкой с запятой. Если факт, директивы препроцессора по определению занимают всю строку, что означает, что они уже оканчиваются символом новой строки. Любой дополнительный ограничитель будет лишним.
Во-вторых, не все "другие утверждения" заканчиваются точкой с запятой. Составной оператор, например, не
i = 5;
{ /* <- compound statement begins here... */
i = 10;
} /* <- ... and ends here. Note: no semicolon */
i = 15;
Ответ 4
#include
- команда предварительной обработки, например #define
. #include
указывает компилятору включить указанный файл в исходный код, прежде чем ваш код будет скомпилирован.