2017-07-27 136 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++的合理平台上都是二进制兼容的。

相关问题