项目

一般

简介

C++可怕陷阱

  1. 有返回值的函数,未return
    1. 返回值为bool的函数未返回return true/false,导致程序运行莫名其妙崩溃?
    如果一个非 void 函数在某些路径下没有返回值,调用该函数时的行为是未定义的。
    1)可能返回一个随机值(栈上的垃圾数据)
    2)可能导致程序崩溃
    3)可能表现为各种奇怪的现象
    2. 编译器行为
    有的编译器(如 MSVC、GCC、Clang)默认只给警告,不报错
    有的编译器在优化时会假设你总是返回了值,结果导致奇怪的运行时错误
    有的编译器在调试模式下表现正常,Release模式下就出错
    结论:
    编译不报错≠代码没问题,未定义行为是C++最危险的陷阱之一
    
  2. 调用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;
    }