01
C语言跨平台概述
什么是跨平台、为什么需要跨平台、C语言的跨平台优势与挑战。
概念导论
02
开发环境搭建
Windows (MSVC/MinGW)、Linux (GCC)、macOS (Clang) 下的工具链安装与配置。
工具链环境
03
预处理与宏定义
跨平台中的 #ifdef、#ifndef、#pragma once 用法,平台宏检测(_WIN32, __linux__, __APPLE__)。
宏预处理
04
数据类型与字节对齐
不同平台下基本数据类型的大小(sizeof)、字节序(大端/小端)问题及处理。
内存对齐
05
文件路径处理
Windows与Unix路径分隔符差异、跨平台路径拼接库(如 dirent.h, shlwapi.h)。
文件路径
06
动态库与静态库
Windows下DLL导出(__declspec(dllexport))与Linux下.so导出(__attribute__((visibility)))。
链接库
07
线程与同步
POSIX线程(pthread)与Windows线程(CreateThread)的抽象封装。
并发线程
08
网络编程抽象
Socket API在Windows(Winsock)与Linux(BSD Socket)下的差异与统一封装。
网络Socket
09
文件I/O与编码
fopen/fread/fwrite的跨平台行为、文本模式与二进制模式(b标志)。
I/O编码
10
时间与日期
time()、clock()、gettimeofday()在不同平台下的精度与实现差异。
时间系统
11
环境变量与系统信息
getenv()、uname()、GetSystemInfo()的跨平台封装。
环境系统
12
信号处理
signal()与sigaction()在Unix与Windows下的行为差异。
信号异步
13
内存管理
malloc/calloc/realloc/free的跨平台一致性、内存对齐(aligned_alloc vs _aligned_malloc)。
内存对齐
14
控制台与终端
ANSI转义序列支持、Windows控制台API(SetConsoleTextAttribute)与Unix termios。
终端UI
15
国际化与本地化
setlocale()、wchar_t与UTF-8处理、不同平台下的字符编码差异。
编码i18n
16
构建系统
Makefile、CMake、Meson的跨平台配置与条件编译。
构建CMake
17
单元测试框架
CUnit、Unity、Check的跨平台集成与测试用例编写。
测试质量
18
错误处理与日志
errno、strerror()、perror()的跨平台行为、自定义日志库设计。
错误日志
19
命令行参数解析
getopt()在Unix与Windows下的实现、跨平台参数库(如argparse)。
CLI参数
20
正则表达式
POSIX regex与Windows的regex库(如pcre2)的跨平台封装。
正则文本
21
序列化与反序列化
JSON/XML库(cJSON, libxml2)的跨平台编译与使用。
序列化JSON
22
加密与哈希
OpenSSL、libsodium的跨平台编译与API调用。
安全加密
23
图形界面基础
GTK、Qt、SDL的跨平台开发入门。
GUI图形
24
嵌入式系统交叉编译
ARM GCC、RISC-V工具链的跨平台配置与调试。
嵌入式交叉编译
25
性能剖析与优化
gprof、Valgrind、Windows Performance Toolkit的跨平台使用。
性能剖析
26
容器化与部署
Docker跨平台编译、CI/CD(GitHub Actions)中的多平台构建。
容器DevOps
27
遗留代码迁移
将32位代码迁移到64位、处理LP64与LLP64模型差异。
迁移64位
28
安全编程
缓冲区溢出、格式化字符串漏洞、跨平台安全函数(_s系列 vs 原生)。
安全防御
29
文档与注释
Doxygen跨平台文档生成、代码注释规范。
文档规范
30
综合实战
构建一个跨平台的命令行工具(如文件搜索工具),整合前述所有知识点。
项目实战