Почему все файлы C, написанные моим лектором, начинаются с одного # в первой строке?

Я просматриваю некоторые примечания к курсу Си, и каждый исходный файл программы Си начинается с единственного знака # в первой строке программы.

Затем есть пустые строки, и после этого другие вещи, сопровождаемые main функцией.

В чем причина #?

(Это вне срока, и я не могу спросить парня.)

Вот пример:

#

#include <stdio.h>
int main() {
   printf("Hello, World!");
   return 0;
}

Ответ 1

Ничего себе, это требование возвращается к 1970-м годам.

В самые ранние дни предварительно стандартизованного C, если вы хотите вызвать препроцессор, вам нужно было написать # как первое, что было в первой строке исходного файла. Написание только # в верхней части файла дает гибкость при размещении других директив препроцессора.

Из оригинального проекта C великим Деннисом Ричи:

12. Строки управления компилятором

[...] Чтобы вызвать [препроцессор] для вызова, необходимо, чтобы первая строка программы начинается С#. Поскольку нулевые строки игнорируются препроцессором, эта строка не должна содержать других информация.

Этот документ делает для большого чтения (и позволил мне перейти на этот вопрос, как сумасшедший кот).

Я подозреваю, что лектор просто сентиментален - он не требовался, конечно, с ANSI C.

Ответ 2

Ничего не делает

В соответствии со стандартом ISO C/C++:

Директива предварительной обработки вида

# new-line

не имеет никакого эффекта

Таким образом, в современных компиляторах этот пустой хеш ничего не делает (new-line ; like- new-line ; не имеет функциональности).


PS: В предварительно стандартизированном C, # new-line играл важную роль, он использовался для вызова препроцессора C (как указано @Bathsheba). Итак, код здесь был либо написан в тот период времени, либо пришел по привычке.

Ответ 3

Вы должны знать о процессе компиляции C. Потому что это "должен знать", как исходный код преобразуется в исполняемый двоичный код (файл).

Из процесса компиляции, исходный код C должен пересечь раздел препроцессора. Но как сказать компилятору предварительно обрабатывать код?... что символ времени # был введен в индикатор Preprocess для компилятора.

Например #define PI 3.141 находится в исходном коде. Затем он будет изменен после сеанса предварительной обработки. Значит, все PI будут изменены на 3.141.

Это как #include <stdio.h>, стандартные функции ввода/вывода будут добавлены в ваш исходный код. Если у вас есть Linux-машина, скомпилируйте ее как gcc -save-temps source_code.c. И посмотрите результаты компилятора.

......хорошо.....