Есть ли оператор '#' в C?
Если да, то в коде
enum {ALPS, ANDES, HIMALYAS};
что вернет следующее?
#ALPS
Есть ли оператор '#' в C?
Если да, то в коде
enum {ALPS, ANDES, HIMALYAS};
что вернет следующее?
#ALPS
В языке C нет оператора #
, но есть препроцессор (программа, которая обрабатывает #include
и #define
). Простой препроцессор превращает #ALPS
в строку "ALPS"
.
Однако этот оператор stringify можно использовать только в директиве препроцессора #define
. Например:
#define MAKE_STRING_OF_IDENTIFIER(x) #x
char alps[] = MAKE_STRING_OF_IDENTIFIER(ALPS);
Препроцессор преобразует приведенный выше пример в следующий:
char alps[] = "ALPS";
В C нет оператора #
. Префикс #
используется для описания инструкций препроцессора.
См.: http://en.wikipedia.org/wiki/C_preprocessor.
№ #
используется для директив препроцессора, таких как #include
и #define
. Его также можно использовать внутри определений макросов для предотвращения раскрытия макросов.
Знак диез в C — это префикс директив препроцессора.
Это не оператор...
"#" не является оператором в C. Но препроцессор (который работает до компилятора) предоставляет возможность для _ включения файлов заголовков: enter code here
#include _ расширения макросов: **#define foo(x) bar x**
_ условная компиляция :
**#if DLEVEL > 5
#define STACK 200
#else
#define STACK 50
#endif
#endif**
В enum {ALPS, ANDES, HIMALYAS};
Ничто не вернет ALPS. Вы только что определили сильный целочисленный тип (ALPS = 0, ANDES = 1 and HIMALYAS = 2)
, но он бесполезен без имени для этого перечисления, например: enum mountain {ALPS, ANDES, HIMALYAS};
#ALPS
вызовет ошибку недействительной директивы предварительной обработки. Однако при использовании как:#define TEST(X) #X
тогдаTEST(ALPS)
выведет"ALPS"
. 31.10.2011char *s = #ALPS
будет смысл ? 31.10.2011#
используется только для специальных инструкций препроцессору, таких как#include
,#define
или#pragma
. Он также используется в макросах, которые будут внутри оператора#define
. Вы никогда не увидите, чтобы#
использовалась как инструкция, не относящаяся к препроцессору. Единственный случай, когда вы могли бы увидетьchar *s = #ALPS
, был бы, если бы у вас был макрос вроде#define FOO(ALPS) { char* s = #ALPS; printf("%s", s); }
. 31.10.2011