2010-08-18 8 views
0

J'essaie de comprendre un code C++ qui lit explicitement une DLL. Est-ce que quelqu'un sait comment fonctionne la ligne #define LFE_API(name) LFE_##name name ci-dessous? Je comprends #define LFE_API(name) LFE_##name mais ne comprends pas le dernier "nom".Macro variadique avec 3 termes

struct Interface 
{ 
    # ifdef LFE_API 
    #  error You can't define LFE_API before. 
    # else 
    #  define LFE_API(name) LFE_##name name 
       LFE_API(Init); 
       LFE_API(Close); 
       LFE_API(GetProperty); 
    #  undef LFE_API 
    # endif 
}; 

Répondre

1

Depuis la première partie de la macro (LFE _ ## nom) juste concaténer les deux parties, un appel à LFE_API crée une variable nommée nom avec le type LFE ## nom, tels que:

LFE_API (Init) se développe en LFE_Init Init;

+0

Merci, bonne réponse :) – Gooly

1
LFE_Init Init; 

etc.

Run g ++ -E le code pour voir ce qui est produit. Un élément de structure a besoin d'un type et d'un nom.

+0

Merci, je ne savais pas que c'est un type et un nom avant. – Gooly