如何在c ++中使用[[noreturn]]属性?

时间:2016-09-17 06:12:55

标签: c++ attributes

根据stack overflow[[noreturn]]属性指定函数不返回。好的,没关系。

但我不明白如何在程序中使用[[noreturn]]属性。我尝试在代码中使用[[noreturn]]属性。但是当我在GCC编译器中编译我的代码时,我得到了以下错误。

error: expected unqualified-id before ‘[’ token
 [[noreturn]] void f(int i) {
 ^
cp1.cpp: In function ‘int main()’:
cp1.cpp:11:6: error: ‘f’ was not declared in this scope
  f(10);

我的代码在这里:

#include <cstdlib>

[[noreturn]] void f(int i) {
  if (i > 0)
    throw "Received positive input";
  std::exit(0);
}

int main()
{
        f(10);
}

如何在C ++中使用[[noreturn]]属性?

2 个答案:

答案 0 :(得分:1)

您肯定使用的是不兼容的C ++ 11编译器或前C ++ 11编译器,或者您的标志未设置为-std=c++11? (至少)。

如果你坚持使用pre-C ++ 11编译器,你可以用一种有希望的可移植方式包装一个使用内置编译器属性的简单宏:

#ifdef __GNUC__
#define NO_RETURN __attribute__((noreturn))
#elif __MINGW32__
#define NO_RETURN __attribute__((noreturn))
#elif __clang__
#define NO_RETURN __attribute__((noreturn))
#elif _MSC_VER
#define NO_RETURN __declspec(noreturn)
#endif

然后用作:

NO_RETURN void f(int i) {
  if (i > 0)
    throw "Received positive input";
  std::exit(0);
}

答案 1 :(得分:0)

我想可能当时编译器不支持该属性,现在通过了,这是我的gcc版本: gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0 版权所有 (C) 2019 Free Software Foundation, Inc.