【发布时间】:2021-07-10 09:32:17
【问题描述】:
假设有一个函数 _foo:
- 是我使用的 Clang 版本所固有的,并且
- 在 GCC 版本中没有定义。
我想为 Clang 和 GCC 以及各种版本编译我的代码。
我希望:
__attribute__((weak)) _foo (...) { my_foo(...); }
允许我在使用 Clang 编译时使用 Clang 版本,但如果使用没有将其作为内在函数的编译器(例如我当前的 GCC 版本),则使用 my_foo。
问题是 Clang 认为我在重新定义 _foo。
我可以 ifdef off of __ clang __ 但我担心的是,对于确实将 _foo 作为内在函数的 GCC 版本,编译会由于相同的重新定义错误而中断。
所以问题是:
- weak 属性不能与内在函数一起使用吗?或
- Clang 不尊重弱属性?
提前致谢。
【问题讨论】:
-
is that for GCC versions that do have _foo as an intrinsic, compilation will break due to the same redefinition error这很正常,叫做“移植”,是的,那你就做#if defined(__clang__) || __GNUC__ < some_versionull。