Que signifient deux signes de dièse adjacents dans une macro C?

Je regarde une application qui définit un grand ensemble de tableaux constants. Ce qui me rend vraiment perplexe, c’est l’utilisation de signes de deux livres dans une macro. Par exemple:

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

Que signifient ces signes de deux livres?

## fournit un moyen de concaténer les arguments réels lors du développement de macros.

## concattenate des symboles. Ainsi, par exemple, si la valeur de p est ab , 0x##p deviendrait 0xab .

Als et sepp2k donnent une réponse correcte.

Cependant, je voudrais append que cette macro semble être complètement inutile.

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

peut être remplacé par meilleur et plus court:

 unsigned int value = 0xbeaf;