现在的位置: 首页 > 综合 > 正文

C中相关的错误处理

2013年11月02日 ⁄ 综合 ⁄ 共 1045字 ⁄ 字号 评论关闭

1.assert的使用

对于内部使用的函数,通常可以用断言,而对于提供给外部使用的函数,最好使用错误处理。
只有在生成DEBUG码时ASSERT()才起作用.
在生成Release码时编译器会跳过ASSERT().
如果在程序开始加入代码:
# define  NDEBUG 
则该程序中的assert函数全部失效,不必逐一删除。

 

断言是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为 true。如果表达式计算为 false,那么系统会报告一个 Assertionerror。它用于调试目的:
assert(a > 0); // throws an Assertionerror if a <= 0

应用举例,一般我们会使用
ASSERT(number<=55);
CONTROLSTUDENT(number);
这样可以保证输入的学生数目绝对小于等于55个人。
如果输入的number参数大于55,程序将报错,不执行。

2.注意事项

对所有函数的返回值进行判断,除非该函数没有返回值
过多的错误检查会影响性能
为了减少调用者的负担,如果函数任何情况下都不会出错,就不要有返回值
要避免重复的,无效的错误检查
对于“不应该发生”的错误,使用断言在开发阶段发现错误,发布以后就不进行错误检查了

3.错误处理方式
建议处理方式:什么也不输出,“返回”错误信息
除非发生了极其严重的错误,否则不要终止程序执行

4.查找错误的出处
#if defined(DEVELOP_PHASE_DEBUG)
#define DEBUGprintf(Argument__) { / printf_("[%10s:%4d]",__FILE__,__LINE__);/
  REGULARprintf(Argument__);}
#else
#define DEBUGprintf(Argument__)
#endif
只能在Debug版使用

 

#error
名为出错,实则用于输出所列出的信息然后中止编译。是发现编译阶段错误的手段。
 例如:
 #ifndef  WIN32
        #error ERROR :only Win32 platform    
                                                                 supported!
    #endif
//说明 如果没有定义WIN32则程序编译到此处就会停止。并在错误处理窗口输出error后面的内容

 

位操作时应注意的问题

尽量使用无符号变量,避免产生符号错误;
注意避免发生数据溢出;
 

【上篇】
【下篇】

抱歉!评论已关闭.