2009-07-21 2 views
1

Я новичок в C, и я поддерживаю код someones. Я встретил это в файле заголовка. Я могу понять, что если источник скомпилирован в окнах, он будет вводить оператор if else, если код скомпилирован в Linux, он будет вводить оператор else. Поправьте меня, если я ошибаюсь.#ifdef #else #endif macro question

Однако вопрос в том, почему используется # (хэш) перед всеми заголовками include?

Большое спасибо за любые предложения,

#ifdef WIN32 
# include <conio.h> 
# include <process.h> 
# include <stdlib.h> 
# include <string.h> 
#else 
# include <unistd.h> 
# include <termio.h> 
# include <sys/types.h> 
# include <sys/stat.h> 
# include <fcntl.h> 
#endif 

ответ

6

#include это способ включить файлы в C.

Вы могли бы быть перепутаны пространствами между # и включают.

Но они не имеют значения. Эти строки все равно #include.

+0

Да, именно так. Я был смущен пробелами между # и включением. Благодарю. – ant2009

3

Поскольку «#include» является синтаксис сказать препроцессора, чтобы включить заголовок. Пространства после фунта только для форматирования и не являются строго необходимыми.

8

Хэш (#) указывает директиву препроцессора. Препроцессор запускает код перед компиляцией и делает вещи в зависимости от всех строк, начинающихся с «#». Директива «#include filename.h» по существу копирует все содержимое файла filename.h и вставляет его там, где была строка «#include filename.h».

1

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

http://msdn.microsoft.com/en-us/library/36k2cdd4(VS.80).aspx

3

В # строки фактически обрабатываются не самим компилятором, но по препроцессора, который работает как на ранней стадии в конвейере компиляции. «#» - это то, как он знает, за какие строки он отвечает.

Этот же препроцессор может использоваться и в других контекстах.

Препроцессор может не только сделать оценку выражения, как в #if и #ifdef статей, но он может также открывать другие файлы и вставлять их с помощью #include и даже сделать замену текста с использованием #define положения.

Дополнительную информацию можно найти на странице Wikipedia entry on the C preprocessor.

#include отличается, скажем, с заявлением VB.Net Imports или с заявлением C# using. Они делают ссылки другим классам, но #include фактически вставляет текст прилагаемого файла в это место в исходном файле. И он может действовать рекурсивно, так что включенные файлы могут сами по себе #include другие.

1

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

cplusplus.com имеет хорошие директивы препроцессора overview.

Смежные вопросы