可以在C中以可移植的方式使用命名属性初始化POD结构吗?
作者:互联网
我试图以与GCC 4.3.4和Clang 2.9兼容的方式使用命名属性初始化结构.
struct A {
unsigned int x;
};
// GCC: error: expected primary-expression before '.' token
A a = {
.x = 0xdeadbeef;
};
// Clang: error: use of GNU old-style field designator extension [-Werror,-Wgnu-designator]
A a = {
x : 0xdeadbeef;
};
我不能将-Wno-gnu-designator添加到CXXFLAGS,因为GCC将拒绝构建,因为它不知道该标志.我不能在没有命名属性的情况下使用初始化列表,因为如果API发生更改,我们将会遇到严重问题.
我需要的解决方案必须符合C标准,同时保留以下事实:如果结构中出现新属性,它们应该是未初始化的(或者最好是NULL).结构是第三方,我不能以任何方式改变它们.
解决方法:
不,你不能命名这些值,只需按顺序给它们.
A a = { 42 };
如果在结构的末尾添加了新字段,则它们将被清零.
标签:c,portability,clang,gcc 来源: https://codeday.me/bug/20190827/1736215.html