在 Linux 和 Windows 下使用 C++ 开发,主要差异体现在编译器、系统 API、构建工具、线程/网络/文件系统等底层机制上。下面从常见维度对比说明:
Linux
Windows
✅ 跨平台趋势:CMake + clang 可大幅减少差异
示例:
// Linux
int fd = open("a.txt", O_RDONLY);
// Windows
HANDLE h = CreateFile("a.txt", GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
但现代 C++ 可用:
std::thread
✅ 推荐 跨平台写法
fork() + exec()CreateProcess()fork() 在 Windows 不存在
| 项目 | Linux | Windows |
|---|---|---|
| 路径分隔 | / |
\ |
| 大小写 | 敏感 | 不敏感 |
| 权限 | chmod | ACL |
C++17 起可用:
std::filesystem
WSAStartup)示例:
// Linux
int sock = socket(AF_INET, SOCK_STREAM, 0);
// Windows
WSADATA wsa;
WSAStartup(MAKEWORD(2,2), &wsa);
✅ 跨平台可用 Boost.Asio / libevent
| 类型 | Linux | Windows |
|---|---|---|
| 扩展名 | .so |
.dll |
| 加载 | dlopen |
LoadLibrary |
| 导出 | 默认 | __declspec(dllexport) |
#ifdef _WIN32 或宏隔离示例:
#ifdef _WIN32
// windows code
#else
// linux code
#endif
Linux C++ 更“原生、底层、标准”,Windows C++ 更“IDE 强、API 封闭、生态微软化”。
如果你是:
我可以针对 某个具体方向(网络 / 多线程 / GUI / 游戏 / 服务端) 再详细讲。