代码之家  ›  专栏  ›  技术社区  ›  Mike

存在什么样的全球导航系统?

  •  3
  • Mike  · 技术社区  · 15 年前

    我最近把一个项目从GCC移植到Clang(我在其中修复了一些C GNU ISMS)。这让我想到:什么C GNU ISMS(GCC中支持的C语言的扩展,不标准)存在?有什么全面的清单吗?

    3 回复  |  直到 13 年前
        1
  •  8
  •   beta    13 年前

    这里是一个非常全面的清单直接从海湾合作委员会的网站。似乎有很多,所以我希望你能幸运地筛选它!

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

        2
  •  0
  •   SF.    15 年前

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

        3
  •  0
  •   Clifford    15 年前

    尽管有很多扩展,并且我遵从beta的答案,但是您的项目不太可能依赖其中的许多扩展。可以禁用GNU构建中的扩展,因此只要这样做,就可以提前警告您的代码库中存在任何潜在的不兼容性。

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