为什么Kernighan和Ritchie的主要功能不包含int?

时间:2019-01-30 02:34:33

标签: c kernighan-and-ritchie

完成的每个示例都将主要省略“ int”。为什么会这样,为什么没有它仍然会编译相同的内容。隐含使用int创建的C编译器吗?

2 个答案:

答案 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可能很快就会上市。)编写新程序时,应使用此类开关,以便编译器将发出有关不符合现代标准的代码的诊断信息。这将有助于编写更好地符合当前标准的代码,具有更明确的行为,并且更有可能在未来更长时期内保持有用。