Почему все файлы 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
. И посмотрите результаты компилятора.
......хорошо.....