gpt4 book ai didi

C : How do you simulate an 'exception' ?

转载 作者:太空狗 更新时间:2023-10-29 16:34:33 24 4
gpt4 key购买 nike

我有 C# 背景,但我目前正在学习 C。在 C# 中,当有人想要发出发生错误的信号时,您可以抛出异常。但是你用 C 做什么?

例如,假设您有一个带有 pushpop 函数的堆栈。在 pop 期间发出堆栈为空信号的最佳方式是什么?您从该函数返回什么?

double pop(void)
{
if(sp > 0)
return val[--sp];
else {
printf("error: stack empty\n");
return 0.0;
}
}

K&R来自第 77 页的示例(上面的代码)返回一个 0.0。但是,如果用户将 0.0 压入堆栈的较早位置,您如何知道堆栈是否为空或是否返回了正确的值?

最佳答案

C 中类似异常的行为是通过 setjmp/longjmp 完成的.但是,您真正想要的是错误代码。如果所有值都可能返回,那么您可能希望接收一个输出参数作为指针,并使用它来返回值,如下所示:

int pop(double* outval)
{
if(outval == 0) return -1;
if(sp > 0)
*outval = val[--sp];
else {
printf("error: stack empty\n");
return -1;
}
return 0;
}

显然不理想,但这就是 C 的局限性。

另外,如果你走这条路,你可能想为你的错误代码定义符号常量(或使用一些 the standard ones ),这样用户就可以区分“堆栈空”和“你给了我一个空指针,笨蛋”。

关于C : How do you simulate an 'exception' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1219438/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com