问题标签 [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.
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 上运行,所以我猜这些功能还没有实现。
我对此非常好奇,所以如果有人能解释一下,我将不胜感激!干杯
c - 为带有和不带有returns_twice和noreturn的函数生成的汇编程序有什么区别?
我知道 noreturn 应该用于预期不会将控制权返回给调用者的函数,但我在生成的汇编代码中找不到差异。有谁知道会生成不同代码的示例?
编辑: noreturn 之后不会生成清理代码。
c++ - C++11 属性是否适用于 g++ 4.7.2?
这是一个小程序:
如您所见,函数Exit_With_Error从未真正返回。我想我会添加一个属性来更好地说明这一点。此处的文档使我相信它应该如下所示:
但是,它不会编译:
不过我得到了这个工作!
我的问题: 如何使 [[attribute]] 语法起作用?我正在使用 gcc 上的 c++11 标志进行编译。例如,
但它不工作。我有 4.7.2 版本的编译器。DOES 的工作方式是否正确,或者我应该争取更简单的语法?
c++ - [[noreturn]] 函数指针
当我使用 clang ( version 3.4 (trunk 194574)
) 编译它时:
我明白了:
这让我感到惊讶,因为它与旧版本的 clang 完美配合。
那么如何定义指向[[ noreturn ]]
函数的指针呢?
我需要这个,因为我在函数内部调用函数指针[[ noreturn ]]
,如果函数指针未标记为 noreturn,显然会产生警告。
哦,这有效:
但是没有独立于编译器的解决方案吗?
c++ - 函数的属性是什么意思?
这个 C++11 语法是什么意思?
C++ 标准工作草案 n3797 指出,
如果函数的任何声明指定了 noreturn 属性,则函数的第一个声明应指定 noreturn 属性。如果一个函数
noreturn
在一个翻译单元中声明了该属性,而同一个函数在另一个翻译单元中声明为没有 noreturn 属性,则程序是非良构的;无需诊断。
函数的属性是什么意思?
c - 告诉 gcc 一个函数调用不会返回
我C99
在GCC
.
我static
inline
在无法修改的标头中声明了一个函数。
该函数永远不会返回但未标记__attribute__((noreturn))
。
如何以告诉编译器它不会返回的方式调用该函数?
我从我自己的 noreturn 函数中调用它,部分想抑制“noreturn 函数返回”警告,但也想帮助优化器等。
我尝试包含一个带有属性的声明,但收到有关重复声明的警告。
我试过创建一个函数指针并将属性应用到那个,但它说函数属性不能应用于指向的函数。
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
。
c - 如何将 noreturn 与函数指针一起使用?
我正在用 C11 编写引导加载程序。当引导加载程序需要将控制权转移给固件时,它会读取位于预定义内存地址的函数指针并调用它。代码如下所示:
函数Firmware_boot()
永远不会返回,因此将其声明为noreturn
:
但我也需要声明FirmwareBootFn
以noreturn
避免编译器抱怨Firmware_boot()
可能会返回。
noreturn
我(可能)尝试了in 的所有排列,但typedef
没有任何结果。另外我知道该属性不能在 中设置,typedef
因为它不是类型的一部分。
有没有办法将我标记Firmware_boot()
为noreturn
避免警告(以及没有警告抑制作弊:-))?
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的不完整/错误吗?