2013-07-05 87 views
27

我想要做的事,如:如何在C++預處理器中檢測g ++和MinGW?

#ifdef GCC 
#define GetFunctionName() string("My function name is ") + __PRETTY_FUNCTION__; 
#endif 

因爲我想用漂亮PRETTY_FUNCTION這僅僅是由GNU支持,據我知道,所以我需要檢測,如果我編譯的G ++和MinGW,我怎樣才能做到這一點?我猜我需要知道的只是編譯器的預處理器定義,就像我在下面爲Microsoft所做的一樣。

#ifdef WIN32 
#define LogFuncBegin() gLogger.FuncBegin(__FUNCTION__); 
#define LogFuncEndSuccess() gLogger.FuncEndSuccess(__FUNCTION__); 
#endif 

如何在C++預處理器中檢測g ++和MinGW?

回答

36

您可以使用:

#ifdef __GNUC__ 
#ifdef __MINGW32__ 

有關其他宏觀的,你可能會感興趣的this page這表明其他編譯器宏

+0

您的測試案例是否包含MinGW-64? – jww

+0

@jww不,但MinGW-64也將定義32宏,所以這也適用於此。 –

+1

該編譯器宏列表的更新版本位於sourceforge中的[Pre-defined Compiler Macros項目](https://sourceforge.net/p/predef/wiki/Home/) – rakslice

23

對於GCC:

#ifdef __GNUC__ 

對於MinGW的:

#ifdef __MINGW32__ 

x86_64的-W64-的mingw32-GCC定義了__MINGW32____MINGW64__

+2

難道你的測試用例包含的MinGW-64? – jww

+2

這個答案寫在MinGW-64之前。但我認爲也定義了'__MINGW32__'宏。所以應該仍然工作 – sedavidw

+0

這是一個有爭議的問題。我找不到[由項目提供的MinGW-64](http://www.mingw.org/)....解決不存在的問題是沒有意義的...... – jww