【发布时间】:2014-09-30 01:12:58
【问题描述】:
我正在编写一些 C 代码,并注意到我认为是一个错误,但事实并非如此。我有以下类型声明语句。
const fee;
但是,它最初没有被捕获,因为编译器和我没有捕获它。所以我很好奇为什么 C 允许这样做以及默认类型是什么。
【问题讨论】:
我正在编写一些 C 代码,并注意到我认为是一个错误,但事实并非如此。我有以下类型声明语句。
const fee;
但是,它最初没有被捕获,因为编译器和我没有捕获它。所以我很好奇为什么 C 允许这样做以及默认类型是什么。
【问题讨论】:
只有原始版本的 C 语言标准 (ANSI/ISO C89/90) 允许这样做。根据“隐式int”规则,此类变量声明默认类型为int。该规则从一开始就存在于 C 中。这就是语言最初的定义方式。
请注意,声明的 declaration-specifiers 部分不能完全省略,例如只是
fee;
不声明int 变量。即使在原始 C 中也是非法的。但是一旦添加了某种声明说明符或限定符,声明就变得合法并默认为 int 类型,如
static fee;
const fee;
register fee;
但是,所有这些在 C99 和更高版本的语言中都是非法的,因为这些版本的语言规范禁止“隐式 int”。
【讨论】:
const 声明没有默认类型。