01
C语言跨平台编译概述
什么是跨平台编译、为什么需要跨平台、主流C编译器介绍(GCC、Clang、MSVC)、跨平台编译的常见挑战。
概念编译器
02
开发环境搭建
Windows下安装MinGW-w64、Linux下安装GCC、macOS下安装Xcode Command Line Tools、使用CMake管理项目。
环境CMake
03
预处理器的跨平台陷阱
宏定义与平台检测(_WIN32、__linux__、__APPLE__)、#pragma once与头文件保护、条件编译的最佳实践。
预处理器宏
04
数据类型与字节对齐
不同平台下基本数据类型的大小(sizeof陷阱)、字节对齐与#pragma pack、跨平台结构体序列化。
内存对齐
05
字节序(Endianness)问题
大端与小端的概念、检测当前平台的字节序、网络字节序与主机字节序转换(htonl/ntohl)、跨平台二进制文件读写。
字节序网络
06
文件路径与目录操作
Windows与Linux路径分隔符差异、使用正斜杠的跨平台技巧、跨平台目录遍历(opendir vs FindFirstFile)。
文件路径
07
动态库与静态库
Windows下DLL的导出与导入(__declspec(dllexport/dlimport))、Linux下共享库的编译与链接、跨平台库加载(dlopen vs LoadLibrary)。
库链接
08
线程与同步机制
POSIX线程(pthread)与Windows线程的差异、跨平台线程封装、互斥锁与条件变量的跨平台实现。
线程同步
09
网络编程跨平台
Socket API的差异(close vs closesocket)、跨平台TCP/UDP通信封装、select/poll/epoll/kqueue的跨平台抽象。
网络Socket
10
文件I/O与编码
文本模式与二进制模式(Windows的\r\n问题)、fopen的跨平台模式、Unicode文件读写(wchar_t的跨平台陷阱)。
编码Unicode
11
时间与日期函数
time_t的跨平台问题、高精度计时器(QueryPerformanceCounter vs clock_gettime)、跨平台时间格式化。
时间计时
12
随机数生成
rand()的跨平台行为差异、C11的rand_s与arc4random、跨平台随机数生成器封装。
随机数安全
13
信号处理
信号在不同平台的行为差异、跨平台信号注册(signal vs sigaction)、异步信号安全函数。
信号异步
14
环境变量与系统信息
getenv与SetEnvironmentVariable、获取操作系统版本、CPU核心数等系统信息的跨平台方法。
系统环境变量
15
命令行参数解析
argc/argv的跨平台行为、getopt的Windows替代方案、跨平台命令行参数解析库推荐。
CLI参数
16
错误处理与errno
errno的线程安全性、Windows的GetLastError与errno的映射、跨平台错误码转换。
错误errno
17
内存管理
malloc/calloc/realloc的跨平台行为、内存对齐(aligned_alloc vs _aligned_malloc)、内存泄漏检测的跨平台方案。
内存泄漏
18
断言与调试
assert的跨平台行为、Windows的__debugbreak与Linux的raise(SIGTRAP)、跨平台调试宏。
调试断言
19
国际化与本地化
setlocale的跨平台陷阱、字符编码转换(iconv vs MultiByteToWideChar)、UTF-8作为通用编码的最佳实践。
编码i18n
20
编译器特性检测
使用__has_feature、__has_builtin、__has_attribute进行特性检测、跨平台编译宏的统一封装。
编译器宏
21
内联汇编的跨平台
x86与x86_64内联汇编语法差异(GCC vs MSVC)、ARM内联汇编注意事项、跨平台性能关键代码的替代方案。
汇编内联
22
SIMD指令的跨平台
SSE/AVX与NEON的差异、使用intrinsics进行跨平台SIMD编程、编译选项对SIMD的影响。
SIMD优化
23
C标准版本选择
C89/C99/C11/C17/C23的特性差异、跨平台编译时指定标准版本、编译器扩展的跨平台风险。
标准版本
24
第三方库的跨平台编译
使用vcpkg、Conan等包管理器、CMake的find_package跨平台配置、常见库(zlib、openssl、curl)的跨平台编译经验。
包管理vcpkg
25
Makefile与构建系统
跨平台Makefile编写技巧、CMake的跨平台最佳实践、Meson等现代构建系统的优势。
构建CMake
26
持续集成与测试
GitHub Actions的跨平台CI配置、跨平台单元测试框架(CUnit、Unity、CMocka)、跨平台代码覆盖率工具。
CI测试
27
性能分析与优化
不同平台下的性能分析工具(perf、VTune、Instruments)、跨平台性能基准测试、编译器优化选项的跨平台差异。
性能分析
28
安全编程跨平台
缓冲区溢出的跨平台防护(/GS、-fstack-protector)、ASLR与DEP的跨平台支持、安全字符串函数(strcpy_s vs strlcpy)。
安全防护
29
遗留代码迁移
将Windows专用代码迁移到Linux、将Linux代码迁移到Windows、使用条件编译逐步替换平台相关代码。
迁移重构
30
综合实战:构建一个跨平台网络库
需求分析、接口设计、平台抽象层实现、测试与发布、文档编写。
实战网络库