Почему включить строки не заканчиваются точкой с запятой?

при включении библиотек 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 указывает компилятору включить указанный файл в исходный код, прежде чем ваш код будет скомпилирован.