Что означают два соседних знака фунта в макросе C? - PullRequest
25 голосов
/ 30 января 2012

Я смотрю на приложение, которое определяет большой набор константных массивов. Что меня действительно смущает, так это использование двух знаков фунта рядом в макросе. Например:

#define r0(p,q,r,s) 0x##p##q##r##s

Что означают эти два фунта?

Ответы [ 3 ]

27 голосов
/ 30 января 2012

## обеспечивает способ объединения фактических аргументов во время раскрытия макроса.

9 голосов
/ 30 января 2012

## сопутствующие символы.Так, например, если значение p равно ab, 0x##p станет 0xab.

5 голосов
/ 30 января 2012

Als и sepp2k дают правильный ответ.

Однако я хотел бы добавить, что этот макрос кажется совершенно ненужным.

unsigned int value = r0(b,e,a,f);

можно заменить лучше и короче:

unsigned int value = 0xbeaf;
...