2012-07-23 8 views
7

コードを読んでいる間、私は「名前を付け」2つの識別子持つクラスに出くわした:名前が2つのクラスですか?

class A_EXP Node 
{ 
//.. 
}; 

が、私はこれが何を意味するのか理解できないのですが。誰かが私を助けてくれますか?

+8

'A_EXP'は、おそらくいくつかの並べ替えのデコレータマクロである - それはおそらくいくつかの状況下で、そして下の何もいくつかのコンパイラ固有の構文(可視性コントロール?)に展開しますその他。 –

+0

'A_EXP'は' __dllspec(dllexport) 'の定義になります –

+0

シナリオによっては' __declspec(dllexport) 'や' __declspec(dllimport) 'に展開されると思います。 – tmpearce

答えて

12

A_EXPは恐らくマクロになっている可能性があります。 __declspecまたは同様の宣言に展開され、コンパイラがクラスをオブジェクトコードとしてどのように出力するかを変更します。このパターンの一般的な用途は、次のようになります。

#define A_EXP __declspec(dllexport) 
+1

".. MSVCの世界で。" –

+1

マクロが何も展開されないようにするには、どのコンパイラでも完全に合法です。 – cdhowie

関連する問題