我只使用C99,昨天,我听说在ANSI C中混合几个声明和初始化是不可能的。因此,这样的代码:
unsigned x = 42, y = 21;
double e = 3.14;
使用gcc'-pedantic
标志:
unsigned x, y;
double e;
x = 42, y = 21;
e = 3.14;
我很惊讶,因为我在C89草案中没有找到任何相关信息,这样的代码工作得很好......
unsigned x = 42, y = 21;
double e = 3.14;
对不起,这似乎是一个微不足道的问题,但我做了一些研究,没有告诉我这条规则...... 这是真的吗?
答案 0 :(得分:4)
初始化是声明的一部分,因此您可以在C89 / C99中的声明中进行初始化:
/* Valid in C89 and C99. There are no statement, only declarations */
unsigned x = 42, y = 21;
double e = 3.14;
你不能做的是在C89中混合语句和声明:
/* Not valid in C89, valid in C99: mixing declarations and statements */
unsigned x, y;
x = 42, y = 21;
double e;
e = 3.14;
答案 1 :(得分:0)
实际上,我正在使用带有-pedantic
标志的第一个语法,它运行良好,没有任何警告。
据我所知,你不能像这样混合你的代码:
int i;
i = 2;
int j;
j = 2;
这是因为,在C语义中,每个程序都是一个块,一个块是一对[声明,命令]。但声明也包括变量的初始化。
每次打开一个新块时,例如使用一段时间或一个if,你将有第二个块,并且你可以再次拥有一个声明部分和一个命令。