是否可以混合多个声明/初始化?

时间:2012-06-25 09:15:33

标签: c initialization declaration

我只使用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;

对不起,这似乎是一个微不足道的问题,但我做了一些研究,没有告诉我这条规则...... 这是真的吗?

2 个答案:

答案 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,你将有第二个块,并且你可以再次拥有一个声明部分和一个命令。