Это называется объединением токенов и используется для объединения токенов во время предварительной обработки. Например, следующий код выведет значения значений c, c_, c_spam:
#include<stdio.h>
#define DsHook(a,b,c) if (!c##_) \
{printf("c=%d c_ = %d and c_spam = %d\n",\
c, c##_,c##_spam);}
int main(){
int a,b,c=3;
int c_ = 0, c_spam = 4;
DsHook(a,b,c);
return 0;
}
Вывод:
c=3 c_ = 0 and c_spam = 4