Почему # требуется перед #include <stdio.h>? - PullRequest
8 голосов
/ 10 июля 2010

Какова функция #?

Ответы [ 6 ]

16 голосов
/ 10 июля 2010

Это обозначает директиву препроцессора :

Важно помнить, что препроцессор C не является частью компилятора C.

Препроцессор C использует другой синтаксис.Все директивы в препроцессоре C начинаются со знака решетки (#).Другими словами, знак решетки обозначает начало директивы препроцессора, и он должен быть первым непробельным символом в строке.

# был , вероятно выбран произвольно какв противном случае неиспользуемый символ в синтаксисе языка C.@ сработал бы так же хорошо, я полагаю.

Если бы не было символа, обозначающего это, то, вероятно, было бы трудно отличить код, предназначенный для препроцессора - как бы вы сказали, if (FOO) должен был быть предварительно обработан или нет?

5 голосов
/ 10 июля 2010

Директивы препроцессора - это строки, включенные в код наших программ, которые являются не программными операторами, а директивами для препроцессора.Этим строкам всегда предшествует знак хеша (#).Препроцессор выполняется до того, как начинается фактическая компиляция кода, поэтому препроцессор переваривает все эти директивы до того, как операторы сгенерируют какой-либо код.

5 голосов
/ 10 июля 2010

Поскольку # является стандартным префиксом для введения операторов препроцессора.

В ранних C-компиляторах препроцессор представлял собой отдельную программу, которая обрабатывает все операторы препроцессора (аналогично тому, как ранние C ++ «компиляторы», такие как cfront-генерируемые C-коды) и генерирует C-код для компилятора ( до сих пор является отдельной программой, но в настоящее время это может быть просто фаза компилятора).

Символ # - это просто полезный символ, который может быть распознан препроцессором и обработан, например:

#include <stdio.h>
#if 0
#endif
#pragma treat_warnings_as_errors
#define USE_BUGGY_CODE

и т. Д.

3 голосов
/ 10 июля 2010

Это потому, что # является индикатором того, что оператор препроцессора

означает, что перед компиляцией вашего кода он будет включать файл stdio.h

2 голосов
/ 10 июля 2010

# является директивой препроцессора.Препроцессор обрабатывает директивы для включения исходного файла (#include), определения макросов (#define) и условного включения (#if).Когда с этим сталкивается препроцессор, он включает заголовки, расширяет макросы и переходит к компиляции.Это может быть использовано для других целей, таких как остановка компиляции с использованием директивы #error.Это называется условной компиляцией.

0 голосов
/ 07 октября 2015

Знаем, без препроцессора программы не запускаются.И препроцессор это # ​​или #include или #define или другой.Поэтому # требуется перед #include.

...