2017-07-27 214 views
0

在一個C++項目中,我使用了包含一些C11頭文件的C庫。它不會與GCC編譯。看到這個簡單的代碼:如何在使用GCC編譯C++時包含C11頭文件?

// main.cc 
#include <stdatomic.h> 

int main() 
{ 
    return 0; 
} 

運行gcc main.cc -lstdc++,它抱怨:error: ‘_Atomic’ does not name a type。然而,clang main.cc -lstdc++就像一個魅力。 我想知道是什麼讓差異,我怎樣才能用gcc編譯它?

+5

該庫不能在C++中使用。現在比以往任何時候都更多的語言你需要包裝它。 – StoryTeller

+0

語言之間有語法差異。當C說'_Atomic int' C++使用模板並且說'原子'。 –

+0

@StoryTeller如何包裝它的任何指導? – Xiao

回答

4

來包裝使用原子能C頭文件,你可以使用的_Atomic其他拼寫和定義轉換這有效的C++宏:

#ifndef __cplusplus 
# include <stdatomic.h> 
#else 
# include <atomic> 
# define _Atomic(X) std::atomic<X> 
#endif 

int foo(_Atomic(unsigned)* toto); 

兩個原子公司的接口都在同步兩個委員會之間被開發,所以除了語法問題之外,這些應該在任何提供C和C++的合理平臺上都是二進制兼容的。