Он обозначает директиву препроцессора :
Одна важная вещь, которую вы должны помнить, это то, что препроцессор C не является частью компилятора C.
Препроцессор C использует другой синтаксис. Все директивы препроцессора C начинаются со знака решетки (#). Другими словами, знак решетки обозначает начало директивы препроцессора, и он должен быть первым непробельным символом в строке.
#
был , вероятно, выбран произвольно в качестве неиспользуемого символа в синтаксисе C. Полагаю, @
сработало бы точно так же.
Если бы не было символа, обозначающего его, то, вероятно, возникли бы проблемы с различением кода, предназначенного для препроцессора - как бы вы узнали, предназначен ли if (FOO)
для предварительной обработки или нет ?
Директивы препроцессора - это строки, включенные в код наших программ, которые не являются программными операторами, а являются директивами для препроцессора. Этим строкам всегда предшествует знак решетки (#). Препроцессор выполняется до начала фактической компиляции кода, поэтому препроцессор переваривает все эти директивы до того, как операторы сгенерируют какой-либо код.
Источник: http://www.cplusplus.com/doc/tutorial/preprocessor/
#
- директива препроцессора. Препроцессор обрабатывает директивы для включения исходного файла ( #include
), определения макросов ( #define
) и условного включения ( #if
).
Когда препроцессор обнаруживает это, он включает заголовки, расширяет макросы и переходит к компиляции. Его можно использовать для других целей, например, для остановки компиляции с помощью директивы #error. Это называется условной компиляцией.
Потому что #
- стандартный префикс для введения инструкций препроцессора.
В ранних компиляторах C препроцессор был отдельной программой, которая обрабатывала все операторы препроцессора (аналогично тому, как ранние «компиляторы» C ++, такие как cfront, генерировали код C) и генерировали код C для компилятора (это может по-прежнему будет отдельной программой, но в настоящее время это может быть просто этап компилятора).
Символ #
- это просто полезный символ, который может быть распознан препроцессором и обработан, например:
#include <stdio.h>
#if 0
#endif
#pragma treat_warnings_as_errors
#define USE_BUGGY_CODE
и так далее.
Это потому, что # является индикатором того, что его оператор препроцессора
означает, что перед компиляцией вашего кода он будет включать файл stdio.h