9

我正在尝试__atomic_load_ngcc atomic builtins页面使用,编译

gcc -Wall -march=i686 -std=gnu99 ll.c -o ll

但它告诉我它不能

警告:函数'__atomic_load_n'的隐式声明</p>

gcc我认为提供arch和标志就足够了march(并通过设置std=gnu99标志来确保),但无济于事。事实上,即使我测试通用__GCC_VERSION____GNUC__宏似乎没有价值......但我有一个非常普通gcc的安装,它来自 Ubuntu。

我知道我在做一些愚蠢的事情,但我不知道是什么。我有 gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3

代码如下所示:它是一个从未被调用的函数(还),所以问题出在编译时。

type* func(type* p) {
    type* q = __atomic_load_n (p, __ATOMIC_SEQ_CST);
}
4

1 回答 1

19

在 GCC 4.6.3 之前,用于原子操作的编译器内置程序是纯粹的编译器扩展,在 GCC 中它们被分组到__sync_*函数系列中。

从 4.7.0 版开始,新的 C++11 和 C11 标准都已最终确定,GCC 更新了它们的原子内置函数以更好地反映这两个新语言修订版的新内存模型。新功能被分组到该__atomic_*系列中。

但是,较旧的内置插件仍然可用,并且文档说明了这一点:

将调用替换为使用内存模型的调用始终是安全的。__sync__atomic__ATOMIC_SEQ_CST

于 2012-12-19T09:42:06.937 回答