我只是问如何在C中使用Try Catch。我在谷歌搜索,我发现C不支持异常,但我可以使用调用setjmp和longjmp的东西,但我不明白。另外,我知道如何在C ++中使用异常。它是这样的:
#include <iostream>
using namespace std;
main(){
int opc;
bool aux=true;
cin.exceptions(std::istream::failbit);
do{
try{
cout<<"PLEASE INSERT VALUE:"<<endl;
cin>>opc;
aux=true;
}
catch(std::ios_base::failure& fail){
aux=false;
cout<<"PLEASE INSERT A VALID VALUE."<<endl;
cin.clear();
std::string tmp;
getline(cin, tmp);
}
}while(aux==false);
system("PAUSE");
}//main
有关C的任何帮助吗?
答案 0 :(得分:0)
C
中没有这样的事
作为一种解决方法,您可能希望:
try
下的函数catch
中的内容
示例:
int error = my_try();
if(error == ENOMEM)
{
printf("Out of memory: Abort\n");
return -1;
}
else if(error == EINVAL)
{
printf("Invalid parameter\n");
return -1;
}
// else error == 0: everything went smoothly
答案 1 :(得分:0)
由于C不支持自动异常,因此最佳做法是检查可能失败的任何函数的返回值。是的,在编写健壮的程序时,通常会编写大量的错误处理代码。
函数setjmp
/ longjmp
支持手动异常(类似于java中的throw
),可用于减少必要的检查量。
那么,当我说没有自动例外时,我的意思是什么? 当事情在C中出现严重错误时,该过程会获得一个信号,而不是例外。所以有自动例外,只有机制完全不同。
这意味着在C中你仍然需要检查malloc
等函数的返回值,因为setjmp
/ longjmp
不会保护你免受调用未定义行为的影响(比如使用空指针)。