在使用GCC编译C++时如何包含C11头文件?

Xia*_*iao 2 c++ gcc c11

在C++项目中,我使用的是包含一些C11标头的C库.它不会与GCC编译.看到这个简单的代码:

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

int main()
{
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

跑步gcc main.cc -lstdc++,抱怨:error: ‘_Atomic’ does not name a type.然而,clang main.cc -lstdc++工作就像一个魅力.我想知道是什么产生了影响,我怎么能用gcc编译它?

Jen*_*edt 8

要包装使用原子的C头,您可以使用其他拼写_Atomic并定义一个宏,将其转换为有效的C++:

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

int foo(_Atomic(unsigned)* toto);
Run Code Online (Sandbox Code Playgroud)

两个原子接口都是在两个委员会之间同步开发的,所以除了语法问题,这些应该在任何提供C和C++的合理平台上都是二进制兼容的.

  • 我不认为 stdatomic.h 需要在 C 中使用 _Atomic 关键字。这似乎是比需要标头更好的设计。 (2认同)