【发布时间】:2015-12-23 13:16:28
【问题描述】:
C89 (C90, ANSI-C) 不允许将变量声明与代码混合。我想知道变量初始化在多大程度上被认为是“代码”。
也许只有用常量表达式初始化才有效?
具体来说,如果我正在编写 C 代码并且我想安全起见(最大化与 ANSI-C 编译器的兼容性),是否应该认为以下内容是安全的?
void f1(void) {
int x = 30;
int y = 40;
int z;
/* ... */
}
void f2(void) {
int x = 30, y = 40;
int z;
/* ... */
}
#define MYCONST (90)
void f3(void) {
int x = 3;
int y = 4 + MYCONST;
int z;
/* ... */
}
void f4(void) {
int x = 3;
int y = time(NULL);
int z = 10 + x;
/* ... */
}
【问题讨论】:
-
ANSI-C 不是也更新到 C99 了吗?
-
@user3528438 ANSI-C 是指由 ANSI 发布的唯一规范,即 C89。 C90 是 ISO 次年采用的 C89,所有后续更新(C99 和 C11)都是 ISO C。
-
就目前而言,您的代码无法编译。您的意思是在函数
f3和f4中的第一个声明之后放置分号而不是逗号? -
@PCLuddite 是的,当然。已修复 - 谢谢
-
@Olaf: user3528438几乎正确; ANSI 采用了 ISO C11,就 ISO 和 ANSI 而言,C99 已正式过时。 (但短语“ANSI C”通常指的是 C89/C90——这就是为什么我尽量避免使用该特定术语。)