Что делают операторы # и ## в C?

что-то вроде #NAME или ## NAME. что они означают в C? Я видел их в документах GCC о макросах.

оператор ## объединяет два аргумента, не оставляя пробелов между ними.

#define printe(a,b) a ## b printe(c,out) << "testing"; 

выход: тестирование

и single # используется для замены параметра с параметром строки как

 #define st(x) #x cout< 

и # также является препроцессорной директивой.

Оператор кода, начинающийся с # указывает, что следует директива препроцессора и должна быть расширена препроцессором.

## называется маркером маркера Token или Token concatenation .

На странице wikipedia, описывающей препроцессор C :

Оператор ## объединяет два токена в один токен, как в этом примере:

 #define DECLARE_STRUCT_TYPE(name) typedef struct name##_s name##_t DECLARE_STRUCT_TYPE(g_object); // Outputs typedef struct g_object_s g_object_t; 

Оператор # сигнализирует другие директивы для препроцессора C, например: #include, #define, #undef, #error, #if, #ifdef, #ifndef, #else, #elif, #endif

«#» На самом деле не является оператором, они являются препроцессорными директивами, а «##» используется только для определения макросов функций.


Существует множество препроцессорных директив в C:

Для определений макросов есть:

 #define #undef 

Для условных включений:

 #ifdef #ifndef #if #endif #else #elif 

Для управления строкой:

 #line 

Для ошибки есть:

 #error 

Для включения исходного файла есть:

 #include 

Для директивы Pragma есть:

 #pragma 

Для получения дополнительной информации прочтите это http://www.cplusplus.com/doc/tutorial/preprocessor/