1

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

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

4

2 回答 2

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;
于 2012-06-25T09:22:56.850 回答
0

实际上,我正在使用您的第一个带有-pedantic标志的语法,它运行良好,没有任何警告。据我所知,你不能像这样混合你的代码:

int i;
i = 2;
int j;
j = 2;

这是因为,在 C 语义中,每个程序都是一个块,一个块是一对[声明,命令]。但声明也包括变量的初始化。

每次您打开一个新块时,例如使用一段时间或一个 if,您将拥有第二个块,并且您可以再次拥有一个声明部分和一个命令部分。

于 2012-06-25T09:24:59.663 回答