【发布时间】:2010-09-24 18:04:12
【问题描述】:
我想初始化一个结构元素,分为声明和初始化。这就是我所拥有的:
typedef struct MY_TYPE {
bool flag;
short int value;
double stuff;
} MY_TYPE;
void function(void) {
MY_TYPE a;
...
a = { true, 15, 0.123 }
}
这是按照C编程语言标准(C89、C90、C99、C11等)声明和初始化局部变量MY_TYPE的方式吗?或者有什么更好的或至少有效的方法吗?
更新我最终得到了一个静态初始化元素,我根据自己的需要设置了每个子元素。
【问题讨论】:
-
你真的应该接受一个更好的答案,我看到你不得不使用一些糟糕的编码指南,但你仍然不应该向其他人建议这是正确的做法..跨度>
-
@KarolyHorvath 好吧,大多数好的答案都是针对 C99 的。也许我的问题与stackoverflow.com/questions/6624975/… 重复?
-
如果这是您的初衷,那么可能是的,但是 1) 投票会非常具有误导性。 2)从顶部搜索命中,这是唯一一个显示 C99 方式的......最好重新使用这个页面进行 C99 演示......(显然人们开始链接这个页面来展示如何做)
-
有趣的是,即使是最初发布的,已接受(并且高度赞成)的答案实际上并没有回答问题。指定的初始化器不解决 OP 的问题,即从初始化中拆分声明。对于 1999 年之前的 C,唯一真正的解决方案是分配给每个成员;对于 C99 及更高版本,CesarB 的答案中的复合文字是解决方案。 (当然,有或没有指示符的实际初始化程序会更好,但显然 OP 背负着非常糟糕的编码标准。)
-
严格来说,“ANSI C”一词现在指的是 ANSI 采用的 2011 ISO 标准。但在实践中,术语“ANSI C”通常指的是(正式过时的)1989 标准。例如,“gcc -ansi”仍然执行 1989 标准。由于是 ISO 发布了 1990、1999 和 2011 标准,因此最好避免使用“ANSI C”一词,如果有任何混淆的可能性,请参考标准的日期。
标签: c struct initialization