In a C++ project, I'm using a C library which includes some C11 headers. It won't compile with GCC. See this simple code:
// main.cc
#include <stdatomic.h>
int main()
{
return 0;
}
Running gcc main.cc -lstdc++
, it complains: error: ‘_Atomic’ does not name a type
. However, clang main.cc -lstdc++
works like a charm.
I'm wondering what makes the difference, and how can I compile it with gcc?
To wrap C headers that use atomics, you may use the other spelling of _Atomic
and define a macro that transforms this to valid C++:
#ifndef __cplusplus
# include <stdatomic.h>
#else
# include <atomic>
# define _Atomic(X) std::atomic< X >
#endif
int foo(_Atomic(unsigned)* toto);
Both atomics interfaces have been developed in sync between the two committees, so besides syntax problems these should be binary compatible on any reasonable platform that provides C and C++.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With