Ответ 1
##
предоставляет способ конкатенация фактических аргументов при расширении макроса.
Я рассматриваю приложение, которое определяет большой набор постоянных массивов. Что меня действительно смущает, так это использование двух фунтовых знаков рядом друг с другом в макросе. Например:
#define r0(p,q,r,s) 0x##p##q##r##s
Что означают эти два знака фунта?
##
предоставляет способ конкатенация фактических аргументов при расширении макроса.
##
объединяет символы. Например, если значение p
равно ab
, 0x##p
станет 0xab
.
Als и sepp2k дают правильный ответ.
Однако я хотел бы добавить, что этот макрос кажется совершенно ненужным.
unsigned int value = r0(b,e,a,f);
можно заменить лучше и короче:
unsigned int value = 0xbeaf;