问题标签 [noreturn]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
40592 浏览

c++ - noreturn 的意义何在?

[dcl.attr.noreturn]提供以下示例:

但我不明白这是什么意思[[noreturn]],因为函数的返回类型已经是void

那么,noreturn属性的意义何在?它应该如何使用?

0 投票
4 回答
3140 浏览

c++ - [[noreturn]] 函数如何具有返回类型?

我遇到了这个“高度可读”和“优雅”代码的“美丽”示例,但我在理解它时遇到了麻烦:

这是我的理解(如果我错了,请纠正我):

  • f()是的成员函数S
  • virtual- 可以被派生类覆盖
  • inline- 编译器应该尝试为调用生成代码f而不是正常调用它
  • const- 该功能无法更改任何S成员
  • noexcept- 函数永远不会抛出(不能抛出或不允许抛出)
  • 参数:指向a的const指针const unsigned long int
  • auto .... -> void- 后缀返回类型void
  • [[noreturn]]- 它永远return不会

以下是我的主要担忧:

  • 如果一个函数被声明为[[noreturn]],它永远不会返回给它的调用者;那么它怎么会有返回类型void呢?无论如何,这个函数中的返回类型有什么意义?
  • int这段代码会用而不是void例如编译吗?
  • 这样的功能有什么实际用途?抛出异常?
  • 该函数执行完毕后(after ),代码流向何方}

我无法让这段代码在 VS2013 Preview 上运行,所以我猜这些功能还没有实现。

我对此非常好奇,所以如果有人能解释一下,我将不胜感激!干杯

0 投票
1 回答
210 浏览

c - 为带有和不带有returns_twice和noreturn的函数生成的汇编程序有什么区别?

我知道 noreturn 应该用于预期不会将控制权返回给调用者的函数,但我在生成的汇编代码中找不到差异。有谁知道会生成不同代码的示例?

编辑: noreturn 之后不会生成清理代码。

0 投票
1 回答
885 浏览

c++ - C++11 属性是否适用于 g++ 4.7.2?

这是一个小程序:

如您所见,函数Exit_With_Error从未真正返回。我想我会添加一个属性来更好地说明这一点。此处的文档使我相信它应该如下所示:

但是,它不会编译:

不过我得到了这个工作!

我的问题: 如何使 [[attribute]] 语法起作用?我正在使用 gcc 上的 c++11 标志进行编译。例如,

但它不工作。我有 4.7.2 版本的编译器。DOES 的工作方式是否正确,或者我应该争取更简单的语法?

0 投票
3 回答
1310 浏览

c++ - [[noreturn]] 函数指针

当我使用 clang ( version 3.4 (trunk 194574)) 编译它时:

我明白了:

这让我感到惊讶,因为它与旧版本的 clang 完美配合。

那么如何定义指向[[ noreturn ]]函数的指针呢?

我需要这个,因为我在函数内部调用函数指针[[ noreturn ]],如果函数指针未标记为 noreturn,显然会产生警告。

哦,这有效:

但是没有独立于编译器的解决方案吗?

0 投票
4 回答
508 浏览

c++ - 函数的属性是什么意思?

这个 C++11 语法是什么意思?

C++ 标准工作草案 n3797 指出,

如果函数的任何声明指定了 noreturn 属性,则函数的第一个声明应指定 noreturn 属性。如果一个函数noreturn在一个翻译单元中声明了该属性,而同一个函数在另一个翻译单元中声明为没有 noreturn 属性,则程序是非良构的;无需诊断。

函数的属性是什么意思?

0 投票
2 回答
11568 浏览

c - 告诉 gcc 一个函数调用不会返回

C99GCC.

static inline在无法修改的标头中声明了一个函数。

该函数永远不会返回但未标记__attribute__((noreturn))

如何以告诉编译器它不会返回的方式调用该函数?

我从我自己的 noreturn 函数中调用它,部分想抑制“noreturn 函数返回”警告,但也想帮助优化器等。

我尝试包含一个带有属性的声明,但收到有关重复声明的警告。

我试过创建一个函数指针并将属性应用到那个,但它说函数属性不能应用于指向的函数。

0 投票
4 回答
2977 浏览

c++ - 如何将 lambda 的 operator() 声明为 noreturn?

如何将operator()lambda 声明为noreturn

Ideone 接受以下代码:

Clang 3.5 拒绝它:

您可以在 Godbolt 中尝试:http: //goo.gl/vsuCsF

哪一个是对的?

更新:相关的标准部分似乎是 5.1.2.5, 7.6.3, 7.6.4 但在阅读之后我仍然不是 100% 清楚(i)什么是正确的行为,(ii)如何标记lambda 的 operator() as noreturn

0 投票
1 回答
1704 浏览

c - 如何将 noreturn 与函数指针一起使用?

我正在用 C11 编写引导加载程序。当引导加载程序需要将控制权转移给固件时,它会读取位于预定义内存地址的函数指针并调用它。代码如下所示:

函数Firmware_boot()永远不会返回,因此将其声明为noreturn

但我也需要声明FirmwareBootFnnoreturn避免编译器抱怨Firmware_boot()可能会返回。

noreturn我(可能)尝试了in 的所有排列,但typedef没有任何结果。另外我知道该属性不能在 中设置,typedef因为它不是类型的一部分。

有没有办法将我标记Firmware_boot()noreturn避免警告(以及没有警告抑制作弊:-))?

0 投票
1 回答
2030 浏览

c++ - 如何将属性添加到 lambda 函数?

假设我有一个 lambda

(诚​​然,这个例子没有什么意义,但这不是重点)。如果这不是一个 lambda,而是一个普通函数,我会用noreturn属性声明它,如下所示

这也可以为 lambda 完成吗?(我尝试了 clang 3.5 的几种变体,但没有任何成功。)


编辑使用Apple LLVM version 6.0 (clang-600.0.57) (based on LLVM 3.5svn),我试过了

或者

但都被拒绝了。这是clang 3.5的不完整/错误吗?