第一个C程序 - Hello World #
一、编写第一个程序 #
1.1 创建源文件 #
创建一个名为 hello.c 的文件:
c
#include <stdio.h>
int main() {
printf("Hello, World!\n");
return 0;
}
1.2 编译程序 #
打开终端,进入文件所在目录,执行编译命令:
bash
gcc hello.c -o hello
编译成功后,会生成 hello 可执行文件(Windows下是 hello.exe)。
1.3 运行程序 #
Linux/Mac:
bash
./hello
Windows:
cmd
hello.exe
输出结果:
text
Hello, World!
二、程序结构解析 #
让我们详细分析这个简单的程序:
c
#include <stdio.h>
int main() {
printf("Hello, World!\n");
return 0;
}
2.1 预处理指令 #
c
#include <stdio.h>
#include是预处理指令,用于包含头文件<stdio.h>是标准输入输出头文件- 包含后可以使用
printf等函数
2.2 main函数 #
c
int main() {
return 0;
}
main是程序入口函数int表示返回整数类型return 0表示程序正常结束
2.3 输出语句 #
c
printf("Hello, World!\n");
printf是格式化输出函数\n是换行符- 每条语句以分号
;结尾
三、编译过程详解 #
3.1 四个阶段 #
text
源代码(.c)
↓ 预处理
预处理文件(.i)
↓ 编译
汇编代码(.s)
↓ 汇编
目标文件(.o)
↓ 链接
可执行文件
3.2 查看各阶段 #
预处理阶段:
bash
gcc -E hello.c -o hello.i
生成 hello.i 文件,展开所有 #include 和 #define。
编译阶段:
bash
gcc -S hello.c -o hello.s
生成 hello.s 汇编文件:
asm
.file "hello.c"
.text
.section .rodata
.LC0:
.string "Hello, World"
.text
.globl main
.type main, @function
main:
pushq %rbp
movq %rsp, %rbp
...
汇编阶段:
bash
gcc -c hello.c -o hello.o
生成 hello.o 目标文件(二进制)。
链接阶段:
bash
gcc hello.o -o hello
链接库函数,生成可执行文件。
3.3 一步编译 #
bash
gcc hello.c -o hello
这条命令自动完成所有阶段。
四、程序入口 - main函数 #
4.1 main函数形式 #
标准形式:
c
int main(void) {
return 0;
}
带参数形式:
c
int main(int argc, char *argv[]) {
return 0;
}
4.2 返回值 #
return 0表示程序成功执行return 非零值表示程序出错
查看返回值:
bash
./hello
echo $?
输出:
text
Hello, World!
0
4.3 命令行参数 #
c
#include <stdio.h>
int main(int argc, char *argv[]) {
printf("参数个数: %d\n", argc);
for (int i = 0; i < argc; i++) {
printf("参数%d: %s\n", i, argv[i]);
}
return 0;
}
编译运行:
bash
gcc args.c -o args
./args hello world 123
输出:
text
参数个数: 4
参数0: ./args
参数1: hello
参数2: world
参数3: 123
五、输出函数详解 #
5.1 printf函数 #
c
int printf(const char *format, ...);
返回值是输出的字符数。
c
#include <stdio.h>
int main() {
int count = printf("Hello, World!\n");
printf("输出了 %d 个字符\n", count);
return 0;
}
5.2 格式化输出 #
c
#include <stdio.h>
int main() {
int age = 25;
float height = 1.75;
char grade = 'A';
char name[] = "张三";
printf("姓名: %s\n", name);
printf("年龄: %d\n", age);
printf("身高: %.2f米\n", height);
printf("等级: %c\n", grade);
return 0;
}
常用格式符:
| 格式符 | 说明 | 示例 |
|---|---|---|
| %d | 有符号整数 | 123 |
| %u | 无符号整数 | 123 |
| %f | 浮点数 | 3.14 |
| %.2f | 保留2位小数 | 3.14 |
| %c | 字符 | ‘A’ |
| %s | 字符串 | “hello” |
| %p | 指针地址 | 0x7fff… |
| %x | 十六进制 | ff |
| %o | 八进制 | 377 |
| %% | 百分号 | % |
5.3 转义字符 #
| 转义字符 | 说明 |
|---|---|
| \n | 换行 |
| \t | 制表符 |
| \r | 回车 |
| \ | 反斜杠 |
| ' | 单引号 |
| " | 双引号 |
| \0 | 空字符 |
示例:
c
printf("第一行\n第二行\n");
printf("姓名:\t张三\n");
printf("路径: C:\\Users\\test\n");
printf("他说: \"你好\"\n");
六、输入函数 #
6.1 scanf函数 #
c
#include <stdio.h>
int main() {
int age;
printf("请输入年龄: ");
scanf("%d", &age);
printf("你的年龄是: %d\n", age);
return 0;
}
注意:scanf 需要变量的地址,使用 & 取地址符。
6.2 读取多个值 #
c
#include <stdio.h>
int main() {
int a, b;
printf("请输入两个整数: ");
scanf("%d %d", &a, &b);
printf("a + b = %d\n", a + b);
return 0;
}
6.3 读取字符串 #
c
#include <stdio.h>
int main() {
char name[50];
printf("请输入姓名: ");
scanf("%s", name);
printf("你好, %s!\n", name);
return 0;
}
注意:scanf 读取字符串时不需要 &,因为数组名就是地址。
6.4 fgets函数 #
scanf 不能读取带空格的字符串,使用 fgets:
c
#include <stdio.h>
int main() {
char name[50];
printf("请输入姓名: ");
fgets(name, 50, stdin);
printf("你好, %s", name);
return 0;
}
七、注释 #
7.1 单行注释 #
c
int a = 10;
7.2 多行注释 #
c
/*
* 这是一个多行注释
* 可以跨越多行
*/
int main() {
return 0;
}
7.3 注释规范 #
c
/**
* @brief 计算两个数的和
* @param a 第一个数
* @param b 第二个数
* @return 两数之和
*/
int add(int a, int b) {
return a + b;
}
八、常见错误 #
8.1 缺少分号 #
c
printf("Hello") // 错误:缺少分号
错误信息:
text
error: expected ';' before 'return'
8.2 大小写错误 #
c
Printf("Hello"); // 错误:Printf应为printf
C语言区分大小写。
8.3 忘记头文件 #
c
int main() {
printf("Hello"); // 错误:未包含stdio.h
return 0;
}
8.4 main函数拼写错误 #
c
int Main() { // 错误:Main应为main
return 0;
}
8.5 忘记return #
c
int main() {
printf("Hello\n");
// 某些编译器会警告
}
虽然某些编译器允许,但建议加上 return 0;。
九、编译选项 #
9.1 常用选项 #
bash
gcc -Wall hello.c -o hello
gcc -g hello.c -o hello
gcc -O2 hello.c -o hello
gcc -std=c11 hello.c -o hello
| 选项 | 说明 |
|---|---|
| -o | 指定输出文件名 |
| -Wall | 显示所有警告 |
| -Wextra | 额外警告 |
| -g | 生成调试信息 |
| -O0 | 不优化 |
| -O1 | 基本优化 |
| -O2 | 标准优化 |
| -O3 | 最大优化 |
| -std=c11 | 使用C11标准 |
9.2 推荐编译方式 #
bash
gcc -Wall -Wextra -g -O0 -std=c11 hello.c -o hello
开发阶段使用 -g -O0,发布时使用 -O2。
十、总结 #
编写C程序的步骤:
- 编写源代码(.c文件)
- 使用gcc编译成可执行文件
- 运行程序
程序结构:
| 部分 | 说明 |
|---|---|
| #include | 包含头文件 |
| main() | 程序入口 |
| printf() | 输出函数 |
| return 0 | 返回状态 |
关键要点:
- C语言区分大小写
- 每条语句以分号结尾
- main函数是程序入口
- 使用#include包含头文件
- 使用gcc编译程序
下一步,让我们学习C语言的基础语法!
最后更新:2026-03-26