aid*_*den 25 c c++ exception-handling try-catch ansi-c
我有一些我正在使用的C代码,我在代码运行时发现错误,但是关于如何正确执行try/catch(如C#或C++)的信息很少.
例如在C++中,我只是这样做:
try{
//some stuff
}
catch(...)
{
//handle error
}
Run Code Online (Sandbox Code Playgroud)
但在ANSI C中,我有点迷失.我尝试了一些在线搜索,但是我没有看到关于如何实现这一点的足够信息/想象我会问这里以防万一有人能指出我正确的方向.
这是我正在使用的代码(相当简单,递归的方法),并希望用try/catch(或等效的错误处理结构)进行包装.
但是我的主要问题是如何在ANSI C中执行try/catch ...实现/示例不必是递归的.
void getInfo( int offset, myfile::MyItem * item )
{
ll::String myOtherInfo = item->getOtherInfo();
if( myOtherInfo.isNull() )
myOtherInfo = "";
ll::String getOne = "";
myfile::Abc * abc = item->getOrig();
if( abc != NULL )
{
getOne = abc->getOne();
}
for( int i = 0 ; i < offset ; i++ )
{
printf("found: %d", i);
}
if( abc != NULL )
abc->release();
int childCount = item->getChildCount();
offset++;
for( int i = 0 ; i < childCount ; i++ )
getInfo( offset, item->getChild(i) );
item->release();
}
Run Code Online (Sandbox Code Playgroud)
Ste*_*sop 25
一般来说,你没有.
可以使用setjmp
和longjmp
构建与try/catch非常相似的东西,尽管在C中没有像析构函数或堆栈展开这样的东西,所以RAII是不可能的.您甚至可以使用所谓的"清理堆栈"(参见例如Symbian/C++)来近似RAII,尽管它不是非常接近的近似值,并且它需要做很多工作.
在C中指示错误或失败的常用方法是返回指示成功状态的值.呼叫者检查返回值并相应地采取行动.例如参见标准C函数:printf
,read
,open
,的想法如何指定你的函数.
混合C和C++代码时,必须确保C++异常永远不会到达C代码.编写将从C调用的C++函数时,捕获所有内容.