是否有支持每个 __attribute__ 的最低 gcc 版本列表?
这里的官方文档仅列出了极少数属性所需的最低版本:
http ://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html
是否有每个属性添加到哪个版本的完整列表?更好的是还可以显示哪些列表与 pcc 和 tcc 兼容。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
对于 gcc 版本:
http://www.ohse.de/uwe/articles/gcc -attributes.html
对于 pcc:
http://pcc.ludd.ltu.se/fisheye/browse/~raw,r=HEAD/pcc/pcc/cc/ccom/gcc_compat.c
对于 tcc
:?
For gcc versions:
http://www.ohse.de/uwe/articles/gcc-attributes.html
For pcc:
http://pcc.ludd.ltu.se/fisheye/browse/~raw,r=HEAD/pcc/pcc/cc/ccom/gcc_compat.c
For tcc:
??
对于许多有用的,您可以从 glib 的 gmacros.h 复制 gcc 版本测试:
http://git.gnome.org/browse/glib/tree/glib /gmacros.h
根据您的项目,您可能还可以只使用 GLib,然后直接使用 G_GNUC_NORETURN 或其他内容来代替
__attribute__
。正如 Juliano 建议的那样,原则上执行 HAVE_GCC_ATTRIBUTE_NORETURN 可能会更好,但这也可能是 YAGNI 的工作,具体取决于您的项目。
For a lot of the useful ones you can copy the gcc version tests from glib's gmacros.h:
http://git.gnome.org/browse/glib/tree/glib/gmacros.h
Depending on your project you may also be able to just use GLib, and then use G_GNUC_NORETURN or whatever instead of the
__attribute__
directly.It probably would be better in principle to do HAVE_GCC_ATTRIBUTE_NORETURN as Juliano suggests, but it may also be YAGNI work, depending on your project.
我发现这个链接比接受的答案稍新:
https://patchwork.ozlabs.org/project/gcc /patch/[电子邮件受保护]/
显然最高可达 8.1.0。但不确定它是否完整。
I found this link which is slightly newer than the accepted answer:
https://patchwork.ozlabs.org/project/gcc/patch/[email protected]/
Apparently up to 8.1.0. Not sure it is complete though.
帮自己一个忙,不要这样做。
也许你的软件有一些预编译配置/设置阶段(比如 autoconf 团队...呃!(颤抖)或者更理智的东西,比如 CMake),使用它。
编写小型测试(autoconf 宏)来检查编译器是否接受您感兴趣的 __attribute__ 以及它是否按预期工作。如果成功,请在源代码中包含的
config.h
文件中写入HAVE_GCC_ATTRIBUTE_XXX
宏。然后使用该宏和
#ifdef
来测试是否应该将该属性放入函数中,或者是否应该使用另一个 hack 来模拟缺少该属性。Do yourself a favor and don't do that.
Perhaps your software has some pre-compilation configuration/setup phase (like the autoconf team... ugh! (shivers) or something more sane like CMake), use that.
Write small tests (autoconf macros) that check if the compiler accepts the
__attribute__
you are interested in and if it works as expected. If successful, write aHAVE_GCC_ATTRIBUTE_XXX
macro in aconfig.h
file which is included from your source.Then use that macro with
#ifdef
to test if you should put or not the attribute in the function, or perhaps if you should use another hack to emulate the lack of the attribute.