代码之家  ›  专栏  ›  技术社区  ›  Armen Tsirunyan

声明为返回int的函数不返回任何值。这是未定义的行为吗?

  •  6
  • Armen Tsirunyan  · 技术社区  · 14 年前

    这是C++中的一个有效函数:

    int f()
    {
       if(false)
       {
          return 42;
       }
    }
    

    以下定义导致UB:

    int x = f(); //return value used
    

    问题是: 以下表达式语句是否导致ub?

    f();
    

    欢迎引用本标准。谢谢

    警告: 关于文体学的评论是无关紧要的。)

    2 回复  |  直到 14 年前
        1
  •  8
  •   vitaut    14 年前

    C++ 03×6 .6 3/2

    从函数的末尾流出等同于没有值的返回;这会导致返回值的函数中出现未定义的行为。

    所以这是一个函数本身的ub。

    btw gcc给您一个很好的警告,指向这个ub:

    In function 'int f()':
    Line 7: warning: control reaches end of non-void function
    
        2
  •  3
  •   Jerry Coffin    14 年前

    C++03,〈63.3/2〉:“从函数的结尾流等于一个没有值的返回;这导致返回值函数中的未定义行为。”

    请注意,在C语言中,这是不正确的。