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 不相容,則返回到主機環境的終止狀態未指定。