我最近将一个项目从GCC移植到clang(其中我修复了一些C GNU-isms)。这让我想到:什么是C GNU-isms(GCC支持的C语言的扩展,哪些不是标准化的)存在?在任何地方都有完整的清单吗?
答案 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多个元素结构,这就变得非常宝贵。