1.1 第一个 Hello, World! 程序

发布于 2025-09-13  496 次阅读


第一个 Hello, World! 程序 | First Hello, World! Program

写在前面:为什么是‘Hello, World!’?

“Hello, World”第一次出现是在 1972 年左右,贝尔实验室的两位计算机科学家在研发C语言时,把打印(输出)'Hello, World!'的程序作为C语言的第一个示例。这个习惯在各大教材教程中,一直延续到了今天。

Hello, World 不只是代码,更是一种“仪式”:当第一次看到屏幕输出 Hello, World!,意味着我们已经成功完成了环境安装、编译运行、输入输出的工作。这是一个新人真正进入编程世界的“敲门砖”。

一、一个Hello, World!程序示例

我们用一个示例程序来了解C语言。

//HelloWorld.c
#include <stdio.h>
int main() {
    printf("Hello, World!");
    return 0;
}

我们分开来看:

1. 主函数

在今后的学习中,我们会很经常地见到int main() {}main()被称作主函数或主程序。记得我们说过源码编写的内容决定了程序的功能么?C语言中,程序将从main() {}的大括号内开始运行,依次向下执行(顺序执行)。主函数也称为C语言程序的入口点(Entry Point)。

2. 语句

C语言中,一般以英文分号或换行为标志,分割出的内容被称为一条语句。例如这里例子中的printf("Hello, World!");return 0;。主函数之外,有的特殊语句不需要分号结尾,例如#include <stdio.h>,我们后面将会讲到。

下面我们来看一看主函数中的两条语句。

1) printf

printf("Hello, World!");是主函数中的第一条语句。程序开始后,便会先行执行printf("Hello, World!");

printf的名字中,f代表format,printf语句的功能是(格式化地)输出内容

在这个例子里,我们见到了printf的最简单的用法:输出一段确定的文字。这段文字需要由英文双引号括起来,成为一个整体,并放到printf()的括号中去。

此外,printf()想要输出文字,即使这个文字可能是单个数字、单个字符,括号中的内容只能由双引号括起来。例如printf("1");printf("a");等等,而printf(1);printf('a')都是不合法的。这里强调这件事情是有意识地在引入数据类型(Data Type)的概念,以后还会讲到。

上文提到printf的最简单的用法是输出一段确定的文字。这里之所以说是“确定”,是因为这段文字在我们编写源码的时候就已经确定好了,编译成程序后便不能更改这段文字。如果要输出其他的文字,那么就需要修改源码,重新编译。这样的话就算作是一个新的程序了。因此这里说是“确定”的,是已经在源码中规定好了的。

2) return

return 0;是主函数中的第二条语句,程序在执行完printf("Hello, World");后,就会紧接着执行return 0;

return是返回的意思,在return的语法中,后面紧跟的内容被称作返回值,在这里,返回值是一个数字0

记得我们讲的主函数么?主函数本质是一种函数(Function),函数的一个重要组成部分就是返回与返回值,这在以后讲解函数的时候会讲到,这里我们简要概述return语句的功能。

程序在主函数或其他函数内(也就是大括号{}内)顺序执行的时候,一旦执行到return语句,会立刻终止所在函数的继续执行(尽管有时候return后面可能还有语句)。终止执行是return的重要功能。

此外,返回值是函数执行的结果。在这个例子中,程序从main()函数开始执行,分别执行printf语句和return语句后,因为执行了return 0;语句,main()函数终止运行,并最后得到数字0的结果。

为什么是0?在 C 语言里,return 0; 代表程序“正常结束”。如果返回非 0 的值,通常代表程序出现了某些错误或异常。

这层意义是约定俗成的,尽管在Hello, World的例子里,这个值不为0也不会有什么问题。返回值会在讲解函数,和讲解更远一点的错误处理(Error Handling)中再次遇到。

3. 头文件

int main() {
    //...
    return 0;
}

由前文我们可以知道,上面这个结构是每一个C语言程序源码的“标配”。程序从main()开始执行,到return 0;结束。

而我们注意到在上面的例子里,源码开头有#include <stdio.h>的语句。这条语句不需要以分号结尾,它放在main()主函数之外,作用是引用头文件

什么是头文件(Header File)?为什么要在源码开头引用它?通俗地讲,头文件是放在程序开头的一个“工具箱”。头文件的后缀名通常是.h,例如这里的stdio.h。(std指的是standard,io指的是in-out,stdio.h即标准输入输出头文件)

记得我们在主函数里写下了printf()语句么?事实上,printf()语句就是在stdio.h头文件中定义的。我们提到头文件是放在程序开头的一个“工具箱”,因此,如果我们不通过#include<stdio.h>来引入stdio.h这个头文件,那么printf()以及stdio.h头文件中包含的众多语句都无法使用。

C语言提供的头文件很多,例如这个例子中的stdio.h,包含了与输入输出相关的语句,如标准输入scanf();、标准输出printf();等等。又例如math.h,包含了众多与数学操作相关的语句。例如求平方根sqrt();、求正弦sin();、求余弦cos();等等。

4. 注释

在这个例子中,还有一行特殊的语句://HelloWorld.c。这段语句被成为注释(Comment)

注释的作用是写在源码里,对源码的逻辑加以解释的。例如:

printf("Hello, World"); //这条语句输出了Hello, World!

注释是写给人看的,编译器在编译程序时会忽略注释的内容。它的主要作用是帮助理解代码。

C语言中,注释分为单行注释和多行注释。单行注释以双斜杠//为开头,此后的单行内容被视为注释。
多行注释用/* ... */包裹,可以跨越多行。例如:

/*
这是一条
多行注释
*/

值得说明的是,一篇文章里,一个良好的代码示例,通常会在第一行用注释注明文件名(例如这里的//HelloWorld.c),甚至编译环境等等信息。这是约定俗成的习惯,方便人们在阅读纸质或网页文章时确定给出的示例源码属于哪个源码文件。


这里是 /* Huajidawang */ 的个人主页