3

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

4

3 回答 3

8

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

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

于 2010-01-30T08:22:19.863 回答
0

尽管有很多扩展,我听从 Beta 对此的回答,但您的项目不太可能依赖其中的许多扩展。可以在 GNU 构建中禁用扩展,因此只需这样做即可提前警告您代码库中的任何潜在不兼容性。

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

于 2010-01-30T09:32:23.907 回答
0

我发现的最好的 GNUism 之一是在填充结构时显式地声明键。

 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 多个元素结构,这将变得非常宝贵。

于 2010-02-01T09:20:29.907 回答