🎯 本章你会学到:写下第一个程序、看懂 gcc 命令、知道 .c 文件是怎么变成可执行文件的。建议边读边敲,每节练习先自己做,再展开答案对照。
先别管理论,把下面这段代码敲进 hello.c,编译,运行。这是后面所有内容的起点。
程序长什么样
hello.c
#include <stdio.h> /* 引入标准输入输出,printf 就来自这里 */
int main(void) { /* 程序入口,返回 int;void 表示不接受命令行参数 */
printf("Hello, C\n");
return 0; /* 返回 0 表示正常结束 */
}运行结果
Hello, C
三行信息量很大:#include 是预处理指令,把标准库的声明复制进来;main 是入口函数,操作系统从这里开始执行;printf 负责往屏幕打印,\n 是换行。
编译并运行
gcc -std=c17 -Wall -Wextra -o hello hello.c
./hello # Windows PowerShell 上运行 .\hello.exe
gcc 是编译器命令;-std=c17 指定标准版本;-Wall -Wextra 打开警告(C 的很多危险写法只会给警告);-o hello 指定输出文件名。
从 .c 到可执行文件
gcc 一条命令其实做了四件事:预处理(展开 #include、#define)→ 编译(生成汇编)→ 汇编(生成目标文件 .o)→ 链接(把目标文件和 libc 拼成可执行文件)。拆开看更清楚:
分步编译
gcc -std=c17 -c hello.c -o hello.o # 只编译不链接,得到目标文件
gcc hello.o -o hello # 把目标文件链接成可执行文件
⚠️ 易错点 不要写
void main()。C 标准要求 main 返回 int;写 void main 在 gcc 上可能侥幸通过,换编译器或换严格模式就报错。⚠️ 易错点 源文件扩展名用
.c。命名成 .cpp 交给 gcc 时会被当 C++ 处理,同一个写法的行为可能不同。✍️ 本节练习
1.1必做打印一张名片
用三条 printf 输出三行:第一行你的名字,第二行你的方向,第三行一句学习目标。
输入 无。
输出 三行文字,逐行输出。
样例输入
(本题无输入)样例输出
小明
数据科学
把 C 学到能读懂内存💡 提示 每条 printf 末尾都要写 \n,否则三行会挤在一行。
✅ 查看参考答案与解析
#include <stdio.h>
int main(void) {
printf("小明\n");
printf("数据科学\n");
printf("把 C 学到能读懂内存\n");
return 0;
}解析 每个 \n 是一次换行;漏掉它,多次 printf 的输出会连成一行。
1.2挑战用一次 printf 输出三行
只调用一次 printf,输出三行内容。改完用 gcc -std=c17 -Wall -Wextra 编译,要求零警告。
输入 无。
输出 三行,例如 A、B、C。
样例输入
(本题无输入)样例输出
A
B
C💡 提示 一个格式串里可以连写多个 \n。
✅ 查看参考答案与解析
#include <stdio.h>
int main(void) {
printf("A\nB\nC\n");
return 0;
}解析 把要一起输出的几行写在一个 printf 里,意思更清楚,也少一次函数调用。