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 引入的特殊情况,省略 main
的 return
语句(并且只有 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
不兼容,则返回到主机环境的终止状态未指定。