C语言有异常处理吗?

反对,你的名字不会被显示。

于天生是网络安全、密码学、程序设计语言和程序设计等主题的优秀回答者

两个人同意。

没有垃圾收集,使用异常机制肯定会降低程序的质量。在Symbian C中使用了一种Leave机制,这是C中异常机制的封装,而且由于Symbian系统运行在资源有限的嵌入式设备上,堆栈空间很小,几乎所有的数据都要放在堆上,所以Symbian C引入了… Display All。

没有垃圾收集,使用异常机制肯定会降低程序的质量。在Symbian C中使用了一种Leave机制,这是C中异常机制的封装,而且由于Symbian系统运行在资源有限的嵌入式设备上,堆栈空间很小,几乎所有的数据都要放在堆上,所以在Symbian C中引入了堆栈清除机制,避免内存泄漏。

Symbian C要求新创建的对象应该在保存到其他对象之前立即放入清理堆栈,这样一旦发生Leave(异常),系统就可以销毁清理堆栈中的对象,防止内存泄漏。所以这样编码很麻烦,每次都要写类似的代码。

HSomeClass * an instance = HSomeClass。NewL();

clean upstack::PushL(an instance);

HSomeOtherClass * aNewInstance = HSomeOtherClass。NewL();

CleanupStack::PushL(aNewInstance);

.......

clean upstack::Pop();

返回;

所以,如果你想在C中使用异常机制,那么你需要:把setjump打包成陷阱宏,然后实现一个清理栈。这个清理栈要分类型,一般数据是一种,句柄是另一种。用c实现IDispose这样的接口并不容易,另外,Symbian没落的一个原因是这样的机制太复杂,很多人理解不了,负责垃圾收集的Java更方便。详见另一个答案。

c语言检测到无效的异常处理。应该导入什么库来使用? C中这个异常处理的关键函数是setjmp和longjimp,setjmp函数可以实现非局部标注,而longjimp可以实现程序内部任意跳转(同样,我们经常使用的goto也只能实现函数内部跳转)。结合这两个功能,百度百科给出了如下总结:

1.setjmp(j)设置“跳转”点,并用正确的程序上下文填充jmp_buf对象j。这个上下文包括程序存储位置、堆栈和帧指针,以及其他重要的寄存器和内存数据。当jump的上下文初始化时,setjmp()返回值0。

2.以后调用longjimp (j,r)的效果是一个非局部的goto或者“长跳转”到j描述的上下文(也就是到最初设置j的setjmp())。当作为长跳转的目标调用时,setjmp()返回r或1(如果r设置为0)。(记住,在这种情况下,setjmp()不能返回0。)

Setjmp()通过两种类型的返回值让您知道它是如何被使用的。设置j时,setjmp()按预期执行;但是当它是一个长跳转的目标时,setjmp()从外部“唤醒”它的上下文。

我封装的异常处理库也是按照上面总结的方法使用的。理解了上面的总结,看代码就很简单了。

使用Throw宏在需要的地方抛出异常。它有两个参数,一个是异常类型,另一个是异常描述字符串。也可以使用ThrowAll抛出任何类型的异常,但是只能用exception来捕获它。

使用Try来包含可能异常的代码段。Oneexception用于捕获异常,它有一个参数标记需要捕获的异常类型。如果此时有异常,则该异常的类型与OnExcept要捕获的类型一致,可以捕获该异常,否则丢弃。如果使用Except宏,您将捕获任何类型的异常。

最后需要调用Finally宏进行清理,包括释放Try宏中应用的内存空间。

一个简单的使用示例如下:

C语言中未处理的异常,请指教。 你好,很高兴回答你的问题。

你的问题,系统已经明确告诉你错误的原因了。因为你定义的X是字符数据,所以它对应的输入输出格式字符是%c,但是你在input语句中写的是%s,是字符串格式,不符合单个字符变量的输入输出。按照题目的意思应该是输入一个字符串,所以定义的时候应该写成char x[2]。因为它以性别存储汉字,所以数组长度可以定义为2。请再试一次。

C语言的库函数有错误函数吗? C语言的标准库函数中没有错误函数。c语言对异常的处理不够好,大部分时候需要人工调试。

有几个类似的函数处理各种情况下的异常:

Ferror函数:当调用各种输入输出函数(如

Putc.getc.fread.fwrite等。),如果有错误,除了函数的返回值之外,还可以使用ferror函数来检查。

它的一般调用形式是

ferror(FP);如果ferror返回值0 (false),则没有错误。如果返回非零值,则表明有错误。应该注意的是,对于同一文件

每次调用输入输出函数时,都会生成一个新的ferror函数。

值,因此应该在调用输入输出函数后立即检查它。

检查ferror函数值,否则信息会丢失。当执行fopen功能时,ferror功能的初始值自动设置为0。库函数中有一个errno变量,每个errno值对应一个字符串表示的错误类型。当您调用“一些”函数时,该函数已经重置了errno的值。Perror函数只是输出您输入的一些信息以及与当前错误号对应的错误。

Perror函数:

用于将最后一个函数的错误原因输出到标准设备(stderr)。参数

s

首先打印引用的字符串,然后是错误原因字符串。这个错误是由全局变量errno引起的。

确定要输出的字符串。

Strerror函数:用于

从错误的号码

支票

错误内容用英文表示,返回一个指向这个英文字符串的指针。如果不知道错误号,发生错误时及时使用。

错误

的当前值

作为一个参数,打印这个字符串。

如何解决C语言中的异常? 操作很简单:点击菜单栏中的“构建”→“bulid选项”,弹出一个对话框。类别里有个下拉列表(默认好像是C语言),点击选择C语言。然后紧接着下面是五个小挂钩,最后一个去掉。(或者在Raw Options下面的框中删除-fall -fallow-single-precision,也是一样的。)点击确定完成。

我的简历没有被翻译成中文。我不知道你的有没有翻译成中文,就直接按照我的告诉你吧。天哪…这个问题也困扰我很久了,我装了无数版本的Cfree…

相关文章

发表新评论