一、C语言简介

C语言是计算机语言的一种,用于人与计算机交流。属于高级语言,同时保留对底层硬件的控制能力,是系统编程领域的基础语言。

发展历史:

时间 事件
1972 丹尼斯·里奇在贝尔实验室设计 C 语言
1973 用于 UNIX 系统内核重写,快速流传
1988 C 语言标准化("C 生万物")
1989 发布 ANSI C(C89)标准
1999 发布 C99 标准

应用领域:操作系统、嵌入式设备、驱动程序、数据库、游戏引擎、其他语言解释器。


二、编译器与开发环境

2.1 编译型 vs 解释型

类型 翻译方式 代表语言 特点
编译型 一次性编译为可执行文件 C / C++ / Go / Rust 运行快,跨平台需重新编译
解释型 逐行解释执行 Python / JS / Ruby / PHP 跨平台性好,速度较慢

2.2 编译过程

.c.exe 的四个阶段:

test.c → 预处理 → 编译 → 汇编 → 链接 → test.exe
  1. 预处理:处理 #include#define,删除注释
  2. 编译:翻译为汇编代码
  3. 汇编:翻译为机器码,生成 .obj
  4. 链接:与库函数链接,生成 .exe

2.3 主流编译器对比

编译器 开发方 平台 特点
MSVC 微软 Windows VS 系列默认编译器
GCC GNU 跨平台 开源,Linux/macOS 主流
Clang LLVM 跨平台 编译快,错误提示友好

2.4 集成开发环境(IDE)

IDE = 编辑器 + 编译器 + 调试器。

IDE 配套编译器 推荐场景
VS 2022 MSVC Windows 下 C/C++ 首选
Xcode Clang macOS / iOS 开发
CLion 可配置 专业跨平台开发
Code::Blocks GCC 轻量入门

VS 2022 与 VSCode 区别:VS 2022 是完整 IDE(开箱即用);VSCode 仅是编辑器,需自行配置编译器,适合前端、脚本。

2.5 VS 2022 编写代码流程

  1. 创建项目:C++ → 空项目,名称和路径避免中文
  2. 创建源文件xxx.h 头文件 / xxx.c 源文件
  3. 编写代码
  4. 运行Ctrl + F5(不调试),F10 逐行调试

常用快捷键:

功能 快捷键
注释 Ctrl + K, Ctrl + C
取消注释 Ctrl + K, Ctrl + U
调整字体 Ctrl + 滚轮
运行(不调试) Ctrl + F5

代码中不可使用中文符号。.exe 是二进制可执行文件。推荐托管到 Gitee。


三、C语言核心概念

3.1 main 函数

main 函数是程序的执行入口。三条规则:

  1. 是程序执行的入口
  2. 一个程序有且只有一个
  3. 多个 .c 文件中 main 仍只能有一个,return 0 表示正常返回

多种写法:

void main() {}                          // 古老,不推荐
int main() { return 0; }                // 标准,推荐
int main(void) { return 0; }            // 明确无参数,推荐
int main(int argc, char* argv[]) {      // 带命令行参数
    return 0;
}

3.2 printf 与库函数

printf = print + format,在标准输出设备打印信息。

#include <stdio.h>
int main(void) {
    int n = 100;
    printf("%d\n", n);   // 输出 100
    return 0;
}

stdio.h 含义:std(standard)+ i(input)+ o(output)= 标准输入输出头文件。

库函数是 C 语言将常用功能封装成的函数库(标准库)。常用分类:

  • 输入输出:printfscanf<stdio.h>
  • 数学计算:sqrtpow<math.h>
  • 字符串处理:strlenstrcpy<string.h>
  • 工具函数:mallocrand<stdlib.h>

3.3 关键字

关键字是 C 语言预定义、有特殊含义的单词,不能用作变量名或函数名。

C89 定义 32 个关键字

类型 关键字
数据类型 int char float double short long signed unsigned void
控制语句 if else switch case default for while do break continue return goto
存储类型 auto register static extern
其他 const volatile sizeof struct union enum typedef

3.4 字符与 ASCII 编码

ASCII 编码表规定字符与数字的对应关系。关键值速记:

字符 ASCII 值
'0' ~ '9' 48 ~ 57
'A' ~ 'Z' 65 ~ 90
'a' ~ 'z' 97 ~ 122
'\0' 0
'\n' 10

小技巧:小写字母比大写字母大 32('A' + 32 == 'a');数字字符转数值 '5' - '0' == 5

可打印字符展示:

#include <stdio.h>
int main(void) {
    for (int i = 32; i <= 126; i++) {
        printf("%c ", i);
        if ((i - 31) % 16 == 0) printf("\n");
    }
    return 0;
}

3.5 字符串与 \0(重要)

C 语言没有专门字符串类型,用字符数组存储,以 \0 作为结束标志

char str1[] = "hello";                       // 自动加 \0,长度 6
char str2[] = {'h','e','l','l','o','\0'};    // 手动加 \0

关键点:

  • \0 ASCII 值为 0,是字符串结束标志
  • "" 字面量自动在末尾追加 \0
  • strlen 计算长度不含 \0sizeof 计算 \0 的总大小
  • 忘记加 \0 会导致 printf 越界访问,出现乱码
char str[] = "hello";
printf("%zu\n", strlen(str));   // 5
printf("%zu\n", sizeof(str));   // 6

3.6 转义字符

\ 开头的特殊字符序列:

转义字符 含义 转义字符 含义
\n 换行 \\ 反斜杠
\t 制表符 \' 单引号
\0 字符串结束 \" 双引号
\r 回车 \b 退格
\ddd 八进制字符 \xhh 十六进制字符
printf("C:\\test\\file\n");    // 输出 C:\test\file
printf("\101\n");              // 输出 A(八进制 101 = 65)

四、相关链接

内部链接:

  • C语言关键字详解
  • C语言字符串与指针
  • C语言编译过程详解
  • Gitee 代码托管入门

外部参考:

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐