我讀一個C++頭文件,其中有寫道:C++:宏展開解釋
class CLASSEXPORT skExecutable : {.....}
註釋說,CLASSEXPORT是一個宏擴展,然後我發現那裏CLASSEXPORT定義。
#define CLASSEXPORT
,這就是all..I感到困惑this..What不CLASSEXPORT代表在這個意義上?以及如何理解類skExecutable?
我讀一個C++頭文件,其中有寫道:C++:宏展開解釋
class CLASSEXPORT skExecutable : {.....}
註釋說,CLASSEXPORT是一個宏擴展,然後我發現那裏CLASSEXPORT定義。
#define CLASSEXPORT
,這就是all..I感到困惑this..What不CLASSEXPORT代表在這個意義上?以及如何理解類skExecutable?
在你的情況下,CLASSEXPORT
擴展爲空(可能是因爲它不需要將它擴展成你的確切配置中有意義的東西),所以你的班級將只是一個class skExecutable {<...>};
。這種方法通常用於導入/導出指令,例如下面的代碼片段適當的指令將地方根據COMPILING_DLL
宏是否定義:
#if COMPILING_DLL
#define DLLEXPORT __declspec(dllexport)
#else
#define DLLEXPORT __declspec(dllimport)
#endif
class DLLEXPORT MyClass
{
};
只是爲了澄清一些東西了:CLASSEXPORT
是宏。 宏擴展是一個過程,在編譯之前執行,在此過程中,所有宏都被定義爲的任何宏替換。
就你而言,我懷疑CLASSEXPORT
是否允許所有以這種方式聲明的類在未來需要時導出到某種共享庫。那麼CLASSEXPORT
將被定義爲像
#define CLASSEXPORT __declspec(dllexport)
,你可以直接使用skExecutable
從共享庫。
你沒有真正回答這個問題。你應該注意你的答案是特定於平臺的。在Linux等,沒有必要編寫__declspec(dllexport)來導出符號。宏是空的原因可能是他在linux上運行,這是一個跨平臺的代碼,宏應該評估爲空。無論如何,該課程都將被出口。 –
非常感謝您的回答。我認爲SingerOfTheFall的答案和你的答案應該結合爲一個很好的答案。哈哈 – gladys0313
@ dandan78我打勾辛格的答案,並不是因爲你的答案不好,而是辛格的答案更重要的是我的問題,他得到了更多的選票。我真的很喜歡你的答案,這有助於我澄清更多問題。我希望你明白 – gladys0313
你沒有真正回答這個問題。你應該注意你的答案是特定於平臺的。在Linux等,沒有必要編寫__declspec(dllexport)來導出符號。宏是空的原因可能是他在linux上運行,這是一個跨平臺的代碼,宏應該評估爲空。無論如何,該課程都將被出口。 –
@SebastianCabot,dllexport的例子就是一個例子。 OP的宏可以做任何事情,我不知道它是什麼意圖,當它不是空的時候。 – SingerOfTheFall
非常感謝您的回答! @SingerOfTheFall我認爲你的答案和丹丹的答案可以結合爲一個很好的答案! – gladys0313