一、C语言简介

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

发展历史:

时间事件
1972丹尼斯·里奇在贝尔实验室设计 C 语言
1973用于 UNIX 系统内核重写,快速流传
1988C 语言标准化("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微软WindowsVS 系列默认编译器
GCCGNU跨平台开源,Linux/macOS 主流
ClangLLVM跨平台编译快,错误提示友好

2.4 集成开发环境(IDE)

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

IDE配套编译器推荐场景
VS 2022MSVCWindows 下 C/C++ 首选
XcodeClangmacOS / iOS 开发
CLion可配置专业跨平台开发
Code::BlocksGCC轻量入门

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 等多样性计算架构

更多推荐