2010-01-08 15 views
7

J'ai un C programme ci-dessous:Que signifie ## pour le préprocesseur C (C++)?

#define f(g,g2) g##g2 
main() 
{ 
int var12=100; 
printf("%d",f(var,12)); 
} 

quand je viens de lancer le préprocesseur se dilate ce que

{ 
int var12=100; 
printf("%d",var12); 
} 

qui est la raison pour laquelle la sortie est 100.

Can quelqu'un me dire comment/pourquoi le préprocesseur se développe var##12 to var12?

+6

Parce que c'est ce que '## 'signifie dans le préprocesseur C. C'est comme dire "pourquoi est-ce que 'i ++' incrémente 'i'?". Parce que le standard C le dit! –

+0

-1 clairement les devoirs. – richo

+2

@Richo .... ce n'est pas un travail à domicile.Je ne suis pas très familier avec le préprocesseur J'ai eu cette question dans mon esprit.Il pourrait être facile pour vous et pourrait ressembler à un devoir. Mais pour ceux qui ne ' Ce n'est pas si facile à comprendre. – Vijay

Répondre

4

parce que ## est un opérateur de concaténation jeton pour le c préprocesseur.

Ou peut-être que je ne comprends pas la question.

+1

Il concatène des jetons, pas des chaînes. –

3

## est Token Pasting Operator

Le double-number-signe ou de l'opérateur "coller-jeton" (##), qui est parfois appelé l'opérateur "fusion", est utilisé dans de type objet et de la fonction à la fois -comme des macros. Il permet de joindre des jetons séparés en un seul jeton et ne peut donc pas être le premier ou le dernier jeton dans la définition de la macro.

Si un paramètre formel dans une définition de macro est précédé ou suivi par l'opérateur de collage de jetons, le paramètre formel est immédiatement remplacé par l'argument réel non étendu. Macro expansion n'est pas effectuée sur l'argument avant le remplacement.

1

#define f(g,g2) g##g2

## est usued concaténer deux macros dans c-préprocesseur. Donc, avant de compiler f (var, 12) devrait remplacer par le préprocesseur avec var12 et donc vous avez la sortie.