C const的默认类型是什么?

jax*_*jax 6 c types

我正在写一些C代码,并注意到我认为是一个错误,但事实并非如此.我有以下类型声明声明.

const fee;
Run Code Online (Sandbox Code Playgroud)

但是,它最初没有被删除,因为编译器和我没有抓住它.所以我很好奇为什么C允许这个以及什么是默认类型.

AnT*_*AnT 14

只有原始版本的C语言标准(ANSI/ISO C89/90)才允许这样做.此类变量声明默认int根据"隐式int"规则键入.从一开始,这条规则就存在于C中.这就是语言最初定义的方式.

请注意,声明的声明说明符部分不能完全省略,例如仅仅

fee;
Run Code Online (Sandbox Code Playgroud)

不声明int变量.即使在原始C中它也是非法的.但是一旦你添加某种声明说明符或限定符,声明就变得合法并默认为inttype,如

static fee;
const fee;
register fee;
Run Code Online (Sandbox Code Playgroud)

但是,所有这些在C99和更高版本的语言中都是非法的,因为这些版本的语言规范禁止使用"implicit int".

  • [GCC默认为`-std = gnu90`](https://gcc.gnu.org/onlinedocs/gcc/Standards.html),而[clang根据C99标准构建C代码](http://clang.llvm .org/compatibility.html #c)默认情况下. (2认同)