2012-01-17 81 views
5

我有一些微軟的源代碼(XLCALL.CPP),而我試圖用代碼塊/ MinGW的編譯。
在此行中我得到一個編譯時錯誤:如何#define __forceinline內嵌?

__forceinline void FetchExcel12EntryPt(void) 

這是錯誤消息我得到:

XLCALL.CPP|36|error: expected constructor, destructor, or type conversion before 'void'

預計此錯誤,因爲__forceinline是微軟特定除了語言,不被GCC認可。

所以,把事情編譯,我嘗試添加thiese在代碼塊定義(項目編譯選項/編譯器設置/#定義):

#define __forceinline inline 
#define __forceinline 

但是我仍然得到同樣的錯誤。

如果在對話框中我沒有指定#define預處理命令(即:__forceinline inline),這是我得到:

XLCALL.CPP|36|error: expected unqualified-id before numeric constant

有沒有辦法來編譯這樣的一段代碼,沒有使用 Visual C++?

+0

看來,這是語法:! '__forceinline = inline' – 2012-01-17 16:07:46

回答

9

的語法__forceinline=inline,如您在評論中指出,因爲這些設置都被轉換爲-D options to GCC

注意inline是強烈暗示GCC的該函數應該內聯,但不保證它。該GCC等效的__forceinlinealways_inline attribute - 例如驗證碼:

#define __forceinline __attribute__((always_inline)) 

或等價此設置:

__forceinline="__attribute__((always_inline))" 

(但是,這很可能是不必要的:如果有一些特別好的理由迫使此功能與MSVC編譯時被內聯,採用了完全不同的編譯器時,這個原因很可能是無效的)