在C ++项目中,我正在使用包含一些C11标头的C库。它不会与GCC编译。看到这个简单的代码:
// 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编译它?
答案 0 :(得分:7)
要包装使用原子的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 ++的合理平台上都是二进制兼容的。