почему включаемые строки не заканчиваются точкой с запятой? - PullRequest
11 голосов
/ 25 октября 2009

при включении библиотек c, строка не заканчивается точкой с запятой, в то время как другие операторы заканчиваются. в чем причина этого?

Ответы [ 4 ]

18 голосов
/ 25 октября 2009

По той же причине, что и макросы #define - нет - они предназначены для препроцессора, который расширяет такие вещи, как включает и определяет, прежде чем компилятор вступит во владение.

10 голосов
/ 25 октября 2009

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

7 голосов
/ 25 октября 2009

"... в то время как другие заявления делают".

Во-первых, директивы препроцессора не являются операторами . Заявление - это сущность, которая существует только на синтаксическом / семантическом уровне. Директивы препроцессора обрабатываются на относительно ранних этапах перевода, до того, как начинается какой-либо синтаксический анализ, поэтому на этом этапе еще нет такой вещи, как «оператор». И по этой причине нет разумного обоснования требовать завершения директивы #include точкой с запятой. На самом деле директивы препроцессора по определению занимают всю строку, что означает, что они уже заканчиваются символом новой строки. Любой дополнительный терминатор будет излишним.

Во-вторых, не все «другие утверждения» заканчиваются точкой с запятой. Например, составной оператор не

i = 5;

{ /* <- compound statement begins here... */
  i = 10;
} /* <- ... and ends here. Note: no semicolon */

i = 15;
4 голосов
/ 25 октября 2009

#include - это команда предварительной обработки, подобная #define. #include говорит компилятору включить указанный файл в ваш исходный код до того, как ваш код будет скомпилирован.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...