第2章:第一个C程序——Hello World,理解main函数、printf、编译与运行过程

说实话,学任何一门编程语言,第一个程序几乎都是“Hello World”。这就像学说话先会喊“妈妈”一样自然。我当年第一次在屏幕上看到那行字时,心里还挺激动的——虽然现在看来,那不过是几行代码的简单组合。

这一章,我们就来亲手写出第一个C程序。别小看它,里面藏着C语言的几个核心概念:main函数printf输出、以及编译与运行的完整流程。搞懂了这些,后面40天你会走得很顺。

2.1 先看代码长什么样

打开你的编辑器(我用的是VS Code,也有人喜欢CLion或记事本),敲下这段代码:

#include <stdio.h>

int main() {
    printf("Hello, World!\n");
    return 0;
}

保存为 hello.c。注意,扩展名必须是 .c,不是 .txt 也不是 .doc。我见过有人把代码写在Word里然后问我为什么编译不过……嗯,那是真事。

2.2 逐行拆解:每一行都在干什么

第一行:#include <stdio.h>

这行叫“预处理指令”。说白了,就是告诉编译器:“我要用标准输入输出库里的东西。” stdio.h 是C语言自带的头文件,里面声明了 printfscanf 这些函数的原型。

你想想看,如果没有这行,你写 printf 编译器根本不认识它。就像你打电话之前得先存了对方的号码一样。

小提示: 我习惯把 #include 放在文件最顶部,顺序一般是:标准库 → 第三方库 → 自己写的头文件。这样找起来方便。

第二行:int main()

这是程序的入口函数。C程序从 main 开始执行,也在这里结束。每个C程序有且只有一个 main 函数。

int 表示这个函数执行完后会返回一个整数值给操作系统。返回 0 通常表示“程序正常结束”,返回非零值表示“出错了”。

注意: 有些老教材会写 void main(),这在某些编译器里能通过,但不符合C标准。我建议你从一开始就写 int main(),养成好习惯。

第三行:printf("Hello, World!\n");

printf 是输出函数,把括号里的内容打印到屏幕上。这里的 \n 是换行符,告诉光标移到下一行。

我曾经在调试一个串口通信程序时,发现输出总是不换行,查了半天才发现是忘了加 \n。这种小细节,往往最坑人。

第四行:return 0;

返回0给操作系统,表示程序正常退出。这行可以省略吗?在C99标准里,如果 main 函数末尾没有 return 0;,编译器会自动补一个。但我建议你显式写出来,代码更清晰。

2.3 编译与运行:从代码到可执行文件

代码写好了,怎么让它跑起来?这中间有个“翻译”过程,叫编译

我用的是 gcc 编译器(GNU C Compiler)。在终端里输入:

gcc hello.c -o hello

这条命令的意思是:用gcc编译 hello.c,生成一个名为 hello 的可执行文件。然后运行它:

./hello

屏幕上就会显示:

Hello, World!

整个过程分四步,我画了张图帮你理解:

源代码 hello.c 预处理 预处理后的代码 hello.i 编译 汇编代码 hello.s 汇编 目标文件 hello.o 链接 可执行文件 hello(或 hello.exe) 运行 屏幕输出 Hello, World!

简单总结一下:

  • 预处理:处理 #include#define 等指令,生成 .i 文件
  • 编译:把C代码翻译成汇编代码,生成 .s 文件
  • 汇编:把汇编代码转成机器码,生成 .o.obj 文件
  • 链接:把多个目标文件和库文件合并,生成最终的可执行文件

你平时用 gcc hello.c -o hello 一条命令就搞定了,其实背后编译器帮你干了这四件事。

2.4 常见错误与避坑指南

写第一个程序时,最容易犯这些错。我当年几乎全踩过:

错误写法 问题说明 正确写法
printf("Hello, World!\n") 漏了分号 C语言每条语句以分号结尾 printf("Hello, World!\n");
#include <stdio.h> 写成 #include <stdio> 头文件名写错 #include <stdio.h>
int main() 写成 int mian() 函数名拼写错误 int main()
花括号不匹配 少写或多写一个 {} 检查花括号成对出现

我曾经在写一个嵌入式项目时,因为 printf 里忘了加 \n,导致串口输出全部挤在一行,调试了整整一个下午。后来我养成了一个习惯:每个 printf 写完立刻检查末尾有没有 \n

2.5 动手试试:修改你的第一个程序

光看不练可不行。我建议你马上做这几件事:

  1. "Hello, World!" 改成你的名字,重新编译运行
  2. 试试去掉 \n,看看输出有什么变化
  3. 故意漏掉一个分号,看看编译器报什么错
  4. return 0; 改成 return 1;,运行后执行 echo $?(Linux/Mac)或 echo %ERRORLEVEL%(Windows),看看返回值

这些实验会让你对编译过程和错误信息有更直观的感受。别怕报错,编译器报的错其实是帮你找问题的好朋友。

2.6 本章小结

这一章我们做了三件事:

  • 写了一个完整的C程序,理解了 main 函数和 printf 的作用
  • 走了一遍编译到运行的完整流程
  • 见识了几个常见错误,知道怎么避免

说实话,Hello World 虽然简单,但它是一个完整的闭环——从编写到运行,每一步都走通了。后面40天里,我们会在这个基础上不断加东西,但核心框架始终不变。

嗯,下一章我们会聊变量和数据类型。不过在那之前,先把今天的内容练熟。代码这东西,敲一遍比看十遍管用。


专注资料整理