5
我有一个结构:是否有可能(合法)在复合文字中分配匿名联合?
typedef struct _n
{
int type;
union {
char *s;
int i;
};
} n;
当我尝试指派复合文字,如:
node n1 = {1, 0};
node n2 = {2, "test"};
海湾合作委员会给了我一些警告,如:
warning: initialization makes pointer from integer without a cast
warning: initialization from incompatible pointer type
嗯,这是清楚的是,编译器不确定我是否为可能不明确的类型赋值。然而,即使我尝试更加确切地指明:
node n0 = {type: 1, i: 4};
我得到:
error: unknown field ‘i’ specified in initializer
我看了,如果我i:
之前把(union <union name>)
那么它可能工作。但是,我更喜欢有一个匿名的联盟。有没有办法做到这一点?
第一次看到它让我感到吃惊,但对于GCC来说,这实际上是合法的(虽然不赞成使用)指定的初始化语法。 – ephemient 2009-12-11 05:39:22
(我猜不推荐)初始化语法是通过阅读某些内核模块代码得到的。'fops'结构通常是这样写的。我现在要切换到C99的方式。对于匿名工会来说太糟糕了,我不知道他们不是标准的,谢谢你帮我清理这些。 – Steve 2009-12-11 13:58:14