Как включить заголовки C11 при компиляции C ++ с GCC?

В проекте C ++ я использую библиотеку C, которая включает несколько заголовков C11. Это не скомпилируется с 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?

1

Решение

Чтобы обернуть заголовки 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 ++.

5

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector