Skip to content

程序结构与基本语法(Program Structure & Basic Syntax)

介绍 C 语言程序的基本骨架——一个完整的 C 程序由哪些部分构成,以及编译器如何理解这些部分。


1. 第一个 C 程序

#include <stdio.h>

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

逐行解析:

代码 含义
#include <stdio.h> 引入标准输入输出头文件,使 printf 可用
int main() 程序的入口函数,操作系统从这里开始执行
{ ... } 函数体的起止边界
printf("Hello, World!\n"); 调用库函数输出文本,\n 表示换行
return 0; 向操作系统返回 0,表示程序正常结束

2. C 程序的基本骨架

┌─────────────────────────────┐
│  #include 预处理指令          │  ← 引入头文件
├─────────────────────────────┤
│  全局变量 / 宏定义(可选)     │  ← 整个文件可见的数据
├─────────────────────────────┤
│  int main()                 │  ← 唯一的入口点
│  {                          │
│      语句;                   │  ← 逐条执行
│      return 0;              │
│  }                          │
├─────────────────────────────┤
│  其他函数定义(可选)          │  ← 供 main 或其他函数调用
└─────────────────────────────┘

关键规则

  • 有且仅有一个 main 函数:程序执行的起点。
  • 语句以分号 ; 结尾:C 语言用分号标识一条语句的结束,遗漏分号会导致编译错误。
  • 大小写敏感MainMAINmain 是三个不同的标识符。
  • 空白字符(空格、换行、制表符)不影响语义:编译器会忽略多余空白,但合理缩进对可读性至关重要。

3. 注释(Comment)

注释是写给开发者看的文字,编译器会完全忽略。

// 这是单行注释(C99 起支持)

/*
 * 这是多行注释
 * 可以跨越多行
 * 不可嵌套(/* 里面再写 */ 会出错)
 */

int x = 10;  // 行尾注释,解释这行代码的意图

使用原则

做法 推荐程度 原因
解释"为什么这么做" 推荐 意图是代码本身无法传达的
解释"做了什么" 酌情 复杂逻辑值得说明,简单赋值则不必
重复代码内容(如 x = 10; // 把 10 赋给 x 不推荐 属于冗余信息

4. 预处理指令(Preprocessor Directive)

# 开头的行在编译前由预处理器处理。

#include <stdio.h>    // 引入系统头文件
#include "myfile.h"   // 引入项目自定义头文件
#define PI 3.14159    // 宏定义:编译前将 PI 全部替换为 3.14159
写法 查找路径
#include <file.h> 先在系统目录中查找
#include "file.h" 先在当前目录查找,再查系统目录

5. 编译与运行的流程

源文件 (.c)  →  预处理  →  编译  →  汇编  →  链接  →  可执行文件
  hello.c        hello.i   hello.s  hello.o    a.out / hello.exe

常用的编译命令(以 GCC 为例):

gcc hello.c -o hello       # 编译并链接,生成可执行文件 hello
gcc -c hello.c -o hello.o  # 仅编译,生成目标文件(不链接)
gcc hello.o -o hello       # 链接目标文件,生成可执行文件

6. 常见错误速查

错误 原因 解决方法
undefined reference to 'printf' 未链接标准库或遗漏 #include <stdio.h> 确认头文件已包含
expected ';' before '}' 某条语句末尾缺少分号 检查上一行是否以 ; 结尾
'main' must return 'int' main 的返回类型不是 int void main() 改为 int main()
implicit declaration of function 使用函数前未声明或未包含对应头文件 添加 #include 或前置声明

7. 总结

要点 说明
main 函数 程序的唯一入口,返回 int
分号 每条语句必须以 ; 结尾
#include 引入头文件,使外部函数可用
注释 解释意图,不解释显而易见的代码
编译 源码 → 预处理 → 编译 → 汇编 → 链接 → 可执行文件

作者: Qing | 修改日期: 2026-07-18