我从未见过在非空返回函数上使用。
以下内容是否有明确的定义?
[[ noreturn ]] int function();
int function(){
while(true){/* impl */}
return 0;
}
返回类型必须为int的原因是该函数通过函数指针传递给另一个函数。
因此,假设调用者看起来如下所示:
//call the non-returning function
int var = (*fptr)();
//use var some way (even though the function will never actually return)
st
以下函数返回未定义的函数。为什么?
function noReturn(arg) {
arg += " bar";
if (arg.length <= 100) noReturn(arg);
else {console.log(arg); return arg;}
}
noReturn("foo");
//logs in the console: "foo bar bar bar bar....", but returns undefined
编辑:哎哟。当然了!谢谢你的回答,它们都很完美。
在下面的代码中,这两个错误处理程序都声明为[[noreturn]],我知道必须返回值的函数是否调用抛出且永不返回的函数是定义良好的行为。
如果控件在没有返回语句的情况下到达函数f的末尾,这将是未定义的行为,但这是不同的,因为返回永远不会发生。
// 'function' must return a value
#pragma warning(default:4716)
class Base
{
public:
[[noreturn]] virtual void ErrorHandler()
{
throw 0;
}
int f
我正试图在Windows上得到一个我的建筑项目,这对我来说是第一次。我是这个平台的初学者。我使用clang支持C11。源最初使用noreturn从<stdnoreturn.h>对永远不会返回的函数进行注释。在编译过程中,我遇到了一大堆解密规范错误,并尽可能地将其缩小到一个琐碎的文件。
#include <stdnoreturn.h>
#include <stdlib.h>
无论是在自己的构建上还是在一起,它们都是,所有这些类型都是完全相同的:
__declspec attributes must be an identifier or string lite
我不太清楚为什么mypy在这里返回Signature of "foo" is incompatible with supertype "Base"错误。返回类型和参数类型似乎匹配。
from typing import NoReturn, Union
class Base():
def foo(self, *args: str) -> Union[NoReturn, str]:
raise NotImplementedError
class A(Base):
def foo(self, x: str) -> s
我正在读一本关于linux编程的书,在一个用于错误处理的头文件中,他们用宏显示了这个代码块,这个宏可以阻止'gcc -Wall‘从抱怨控制到达非空函数的末端。我不完全明白它是怎么工作的。
#ifdef __GNUC__
/* macro stops 'gcc -Wall' complaining that 'control reaches
end of non void function' if we use following functs to
terminate main() or some other non-void funct *
我有一个函数,它显示一些消息,正确地完成程序并最终调用exit(-1);。下面是一个用法示例:
Data SomeFunction()
{
Data data;
if (some_condition) {
// filling the data
return data;
}
ShowErrorAndExit("Some message");
//return data - I don't want it here!
}
问题是,编译器说:
警告:控制达到非无效功能的末尾。
然而,这是不正确的,因为这个函数的结束永远不会达到。我
根据的说法,[[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);
假设我在控制台脚本(1)中有以下函数:
def example(x: int) -> typing.Union[typing.NoReturn, int]:
if x > 10: # something is wrong, if this condition is true
# logging
# cleanup
sys.exit()
return x * 10
返回类型是否正确指定?由于NoReturn意味着函数永远不会返回(参见:),这似乎是错误的。但是mypy并不抱怨Union和NoReturn的结合。
这似乎是错
当我在下面编译C程序时,我会收到这样的警告:‘noreturn’ function does return。这是一项功能:
void hello(void){
int i;
i=1;
}
为什么会发生这种事?对此函数的所有调用都是hello();
编辑:完全错误输出:
home.c: In function ‘hello’:
hhme.c:838:7: error: variable ‘i’ set but not used [-Werror=unused-but-set-variable]
home.c:840:1: error: ‘noreturn’ function do