目前,我在编写
assert(false);
在我的代码从未到达的地方。其中一个例子是,用一种非常类似C语言的风格编写的:
int findzero( int length, int * array ) {
for( int i = 0; i < length; i++ )
if( array[i] == 0 )
return i;
assert(false);
}
当 assert(false) 被执行时,我的编译器会认为程序结束。但是出于性能原因,每次使用 -DNDEBUG 进行编译时,最后的断言会消失,并且编译器会警告执行结束函数时缺少返回语句。
如果我们需要结束一个程序,但实际上无法到达代码的某个部分,有哪些更好的替代方案呢?该解决方案应
- 被编译器识别并且不产生警告(如上述警告或其他警告)
- 允许自定义错误消息
我特别关注的是解决方案,无论是现代C ++还是90年代的 C。
abort()
?虽然我不确定自己是否正确理解了问题。 - Ayxan Haqverdili0
,你的代码应该如何表现?你假设0
在数组中存在。这有什么保证吗? - abelenkyarray
存储了什么,他有责任断言不可能的情况。让findzero
返回一个可选项并在调用站点上进行断言。 - local-ninja