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