存在什么C GNU-isms?

时间:2010-01-30 08:20:05

标签: c gcc language-extension

我最近将一个项目从GCC移植到clang(其中我修复了一些C GNU-isms)。这让我想到:什么是C GNU-isms(GCC支持的C语言的扩展,哪些不是标准化的)存在?在任何地方都有完整的清单吗?

3 个答案:

答案 0 :(得分:8)

这是一个非常全面的列表,直接来自GCC的网站。似乎有很多,所以我祝你好好筛选它!

http://gcc.gnu.org/onlinedocs/gcc-4.2.0/gcc/C-Extensions.html

答案 1 :(得分:0)

虽然有很多扩展,但我会按照Beta的答案,你的项目不太可能依赖于其中的许多。可以在GNU构建中禁用扩展,因此只需这样做就可以提前警告代码库中任何潜在的不兼容性。

您可能会遇到其他问题,例如GCC支持大多数C99功能,而某些流行编译器则不支持(特别是Microsoft VC ++)。因此,在测试代码库时,您可能也想要禁用C99功能。

答案 2 :(得分:0)

我找到的最好的GNU之一是填充结构时的显式键声明。

 struct canmsg_t {
      short     flags;
      int       cob;
      canmsg_id_t   id;
      unsigned long timestamp;
      unsigned int  length;
      unsigned char data[CAN_MSG_LENGTH];
 };

 canmsg_t msg = 
 {
      ["flags"] = 0x00;
      ["cob"]   = 0;
      ["id"]    = 0x534;
      ["timestamp"] = 0;
      ["length"] = 1;
      ["data"] = { 0 };
 }

这不允许跳过成员或重新排序它们,如果你这样做会引发错误,但是有100多个元素结构,这就变得非常宝贵。