我有一个返回非void的函数。在调用者方面,我想检测是否在原始函数中调用了return语句。
我知道,不允许非void函数返回任何内容,它会在gcc中抛出警告。但我想根据是否调用return或控件是否到达函数结束来打印运行时错误。
被叫方由用户定义。我只是提供声明。所以,基本上我想确保callee函数的实现者,不要跳过“return”语句。
答案 0 :(得分:1)
您无法确定函数如何从调用者返回(除了它是抛出异常还是返回异常)。您唯一能做的就是阻止函数使用该编译器警告显式返回,或者在您不希望控制的函数末尾添加运行时错误调用。您可以做的一个技巧是让函数的返回类型具有默认构造函数,该构造函数会产生运行时错误;任何return语句都需要使用其他一些构造函数。但是,一旦你这样做,你可能只是在函数末尾添加一个错误调用或更改返回类型以获得GCC警告。
答案 1 :(得分:0)
听起来你真正想做的就是返回错误代码,或抛出异常
答案 2 :(得分:0)
如果具有非void返回类型的函数不是return
,则行为未定义。
这意味着你无法在运行时检查那些真正应该是编译器错误的东西(C#编译器认为这是一个错误)。
如果您想知道您的函数是否到达结尾,请使其返回已知值或抛出异常。