KR C 中的原始 Hello World

以下是原版 Hello World! Brian Kernighan 和 Dennis Ritchie 编写的 The C Programming Language 一书 (Ritchie 是贝尔实验室 C 编程语言的原始开发人员),被称为“K&R”:

Version = K&R

#include <stdio.h>

main()
{
    printf("hello, world\n");
}

请注意,在编写本书第一版(1978)时,C 编程语言并未标准化,并且该程序可能无法在大多数现代编译器上编译,除非他们被指示接受 C90 代码。

K&R 书中的第一个例子现在被认为质量很差,部分原因是它缺乏 main() 的显式返回类型,部分原因是它缺少 return 语句。本书的第 2 版是为旧 C89 标准编写的。在 C89 中,main 的类型默认为 int,但 K&R 示例不会向环境返回定义的值。在 C99 及更高版本的标准中,返回类型是必需的,但是由于 C99 5.1.2.2.3 引入的特殊情况,省略 mainreturn 语句(并且只有 main)是安全的 - 它相当于返回 0,这表明成功。

当程序不使用任何命令行参数时,main 用于托管系统的推荐且最便携的形式是 int main (void),或者当程序使用命令行参数时,int main(int argc, char **argv)

C90§5.1.2.2.3 程序终止

从初始调用到 main 函数的返回等同于调用 exit 函数,其中 main 函数返回的值作为其参数。如果 main 函数执行不指定值的返回,则返回到主机环境的终止状态是未定义的。

C90§6.6.6.4 return 声明

如果执行了没有表达式的 return 语句,并且调用者使用了函数调用的值,则行为是未定义的。到达终止函数的 } 等同于执行没有表达式的 return 语句。

C99§5.1.2.2.3 程序终止

如果 main 函数的返回类型是与 int 兼容的类型,则从初始调用到 main 函数的返回等同于调用 exit 函数,其中 main 函数返回的值作为其参数; 到达终止 main 函数的 } 返回值 0.如果返回类型与 int 不兼容,则返回到主机环境的终止状态未指定。