C++可怕陷阱¶
- 有返回值的函数,未return
1. 返回值为bool的函数未返回return true/false,导致程序运行莫名其妙崩溃? 如果一个非 void 函数在某些路径下没有返回值,调用该函数时的行为是未定义的。 1)可能返回一个随机值(栈上的垃圾数据) 2)可能导致程序崩溃 3)可能表现为各种奇怪的现象 2. 编译器行为 有的编译器(如 MSVC、GCC、Clang)默认只给警告,不报错 有的编译器在优化时会假设你总是返回了值,结果导致奇怪的运行时错误 有的编译器在调试模式下表现正常,Release模式下就出错 结论: 编译不报错≠代码没问题,未定义行为是C++最危险的陷阱之一
- 调用system执行系统命令
// 多线程环境下,可能多个线程都会调用systemw API,如果通过以下这样判断返回值可能会有问题,因为system实际调用成功了,但返回非0 static int ExecuteCommand(const char* command) { int result = system(command); if (result != 0) { std::cerr << "Command failed: " << command << std::endl; return -1; } return 0; }