2010-11-10 49 views
3

問題標題應該說這一切,但這裏有一個例子什麼樣的事情我在尋找:如何檢查(通過預處理器)如果C源文件被編譯爲C++代碼

#ifndef THE_IDENTIFIER_THAT_WOULD_INDICATE_BEING_COMPILED_AS_CPLUSPLUS 

/* 
* Example of something that would matter. 
*/ 
typedef enum _bool bool; 
enum _bool { false, true }; 

#endif 

什麼是標識符?這是嚴重的竊聽我,因爲我知道我看過以前的代碼。順便說一下,我正在使用GCC。

(我很驚訝,我不能在SO找到重複的地方。如果有人能找到一個,隨意重定向我和關閉這個作爲重複數據刪除。)

+3

這'__cplusplus'。該宏由C++編譯器定義。重複從:http://stackoverflow.com/questions/3858308/using-c-preprocessor-to-determine-compilation-environment – birryree 2010-11-10 21:27:45

+1

順便說一句:C99添加了一個名爲'_Bool'的本地布爾類型,別名爲'布爾',如果你包括'' – Christoph 2010-11-10 21:49:31

+0

另請參見[預處理指令來測試這是C還是C++](http://stackoverflow.com/questions/12548490/preprocessor-directive-to-test-if-this-is-c-or-c )瞭解'extern「C」'和一些處理方法。 – 2012-09-23 06:43:06

回答

10
#ifndef __cplusplus 

如果我沒記錯正確。

+0

它通常用於頭文件護衛#ifdef __cplusplus \ n extern「C」{\ n#endif – Petesh 2010-11-10 21:29:07

+1

+1你記得沒錯。對於William想要的應該是#ifndef。 – 2010-11-10 21:29:08

+0

謝謝。我編輯了我的答案。 – frast 2010-11-10 21:30:00

2

#ifdef __cplusplus

有幾個真正古老的編譯器(Cfront的早期版本和幾個端口),它是c_pluplus,IIRC。

1

你正在尋找的標識符爲__cplusplus,它可以這樣使用:

#ifdef __cplusplus 
// Code being compiled as C++. 
#endif 
1

#ifdef __cplusplus

我認爲,文件擴展名也很重要,如果C++編譯器被賦予了.c文件將它編譯爲C代碼。儘管如此,我沒有什麼可以支持的。

4

標識符是__cplusplus

#ifdef __cplusplus 
#error NO C++ PLEASE 
#endif 
+3

+1,用於'__cplusplus'的最佳使用。 – 2010-11-10 21:39:03

相關問題