我有成功返回零一个功能,或者检测到错误的行号:C++外部可见常量
int func() {
// stuff
if (something is wrong) {
return __LINE__;
}
// more stuff
if (something else is wrong) {
return __LINE__;
}
// all good
return 0;
}
真实呼叫者只检查返回值是否为零或不经常这样:
int ret = func();
if (ret != 0) {
return ret;
}
然而,在测试中,我想检查实际的返回值,以验证某些故障条件被触发:
int ret = func();
EXPECT_EQ(42, ret);
这提出了一个问题,因为当编辑func()的源文件时,返回语句的行以及返回的值也会改变。我希望行号值可用于func()的调用者。
是可能的“出口”行号这样的:
// header
extern const int line_number;
// source
const int line_number = __LINE__;
不幸的是,这只适用于功能的外线号码。我想这样的:
if (something is wrong) {
const int line_number = __LINE__; return __LINE__;
// or some other const thing
}
可以从另一个翻译单位(文件)读取。
我试过static const int line = __LINE__
,但有两个缺陷:
- 它不是在头宣布的
line_number
定义。 - 它可能不会被设置,直到执行通过它。
C不是C++不是C!不要为无关语言添加标签。 – Olaf
如果你需要返回代码,返回一个'enum'值将是一个可能的解决方案,而不是行号。 – crashmstr
为什么不用失败类型的'enum'并返回失败的'enum'值。这将从文件配置中分离错误报告。 – NathanOliver