完成的每个示例都将主要省略“ int”。为什么会这样,为什么没有它仍然会编译相同的内容。隐含使用int创建的C编译器吗?
答案 0 :(得分:2)
是的。吹掉白皮书上的灰尘,您会确切地看到。 K&R就是这样,它发生在ANSI C之前。
另一个区别是函数参数。如果我没记错的话,就是这样
some_function_name(a,b)
int a;
long float b;
{
printf("%d %lf\n", a, b);
}
几十年来,C和C ++发生了很多变异。
答案 1 :(得分:2)
在Kernighan和Ritchie撰写本文时,int
是默认类型。总体而言,计算要比今天简单得多,并且资源更多。语言旨在满足简单的需求。而且它们还没有完全设计。它们是从零开始发展的,在不同的地方,不同的人出于不同的想法而做出了改变。因此,当时的C并不是以关于类型安全的现代思想来设计的,也不是为了减少错误的发生而对语法严格的设计。它所包含的一些功能是人们认为很好并且可以立即使用的功能,而不一定是已经对其更深的影响或未来效果进行了分析的功能。
简洁是语言设计的一个激励因素。 int
是一种经常使用的类型,因为对于任何正在使用的计算机,它都是“自然”类型,因此将其设置为默认类型很方便。因此,许多声明默认为int
,因此不是必需的。
现代的编译器可能仍然允许不存在int
,因此仍然可以编译旧代码。通常,此类编译器会进行一些切换,以更加严格地接受它们所使用的语言。例如,在GCC和Clang中,您可以指定-std=c11
以请求更严格的C标准一致性。 (并且-std=c17
或-std=c18
可能很快就会上市。)编写新程序时,应使用此类开关,以便编译器将发出有关不符合现代标准的代码的诊断信息。这将有助于编写更好地符合当前标准的代码,具有更明确的行为,并且更有可能在未来更长时期内保持有用。