第一编博客从C语言函数返回错误信息开始

来源:互联网 发布:神经网络算法的缺点 编辑:程序博客网 时间:2024/06/03 22:51

    听说csdn不错,老早也有接触过(下载资源),今天遇到一个问题,想到之前自己的代码都没有积累下来,每一次都是临时需要临时编写,太浪费了,所幸注册csdn帐号,写下来。

    今天在编写一个函数,在函数中有对传进来的参数及函数运行过程中的错误信息进行一些判断,当发生错误的时候,需要返回错误信息给调用者,但怎样返回呢?

    有些函数是直接return一个整型的数,0表示错误,1表示正确,然后就没有其它信息了,这样不好,传送给调用者的信息太少。

    有的函数也是返回一个整型的数字,但不局限于0和1,而是用许多数字,表示不同的信息,比如大于0的表示执行正确,小于0的表示执行错误,然后再对小于0的信息进行判断,比如-1表示参数空指针,-2表示malloc分配空间分败等,以这样子的方式进行错误信息的返回有一个限制,就是返回的信息,只有一个,即一次只能判断一次错误。

    在查找资料的时候,有看到windows的api有用了一个32位的无符号值,使用这个32位数值的不同位来表示,不同的错误,我是觉得,这样子又有点复杂了。

    我还有想到一种方法,就是调用者在传弟给被调用者的时候,传进去一个err_msg(结构体)的地址,这样子,当有错误发送的时候,就可以设置这个err_msg结构体,并且return的值中,只使用0和1,0表示错误,1表示正确,只返回0时,就对err_msg结构体进行处理,但仔细想一想,这个,也是复杂了些。

    除了错误信息的返回是一个问题外,还有一个问题,就是调用者和被调用者之间的约定,就比如,调用者传递实参给被调用者,对传递参数的正确性判断,应该谁来做?如果调用者和被调用者都不做处理,就会使程序跑乱掉,甚至被操作系统直接杀死,这是不允许的。如果调用者和被调用者都做了参数的正确性判断,则会看似的有些多余。

    这两个问题,我有了自己的想法,大家也会有自己的想法,暂且这样子,在实施中各自做选择吧。


    2014-11-18日有编写了一个函数,它的错误信息是通过返回一个整型数字实现的,比如返回-1表示某个参数的空指针,-2表示传递过来字符串的长度为0,当不对代码进行修改的时候,这样种方法是可以的,若有对代码进行了修改,特别是修改了有关返回错误信息的部分比如:原先的版本当参数是空指针时返回-1,而修改之后参数是空指针时返回的是-2,由于修改前与修改后对同一个错误返回的值不同,就会导致,调用者的程序也要进行修改,这无疑增加了工作量,也不符合,分层的想思。

    由上面的描述相到了C语言中的全局变量errno,errno的处理方式应当是有事先定义了许多已知的错误代码,当在运行过程中发现什么样的错误时,就返回相应的错误代码即可。

    联想起网络协议与之前看过的erlang的调用者与被调用者之间的关系。应当使用协议,消息。


    2014-11-20日:

    昨天晚上,有回复一个csdn用户的一个问题,在编写回复的代码时,忽然感到写的太慢了!不是因为我敲代码的速度慢,而是进入主题太慢了,如果函数对参数的正确性进行处理,需要花费许多代码。还不如对所有的参数错误都直接返回一个错误代码-1。

    还有一个问题,就是在函数处理的过程中,处理到一半的时候,发生了错误,这个时候,要怎样返回呢?是将已经做的全部销毁?还是将已经做的也返回?


    2014-11-21日   2014-11-23日:

    我对函数处理数据,处理一半的时候出错,对于已经处理过的数据怎样处理,丢掉还是返回给调用者,有了自己的看法,调用函数是为了得到调用的结果,不管是好是坏,总要返回一些结果,对于返回的结果需要怎样处理,就交于调用者来处理。

0 0
原创粉丝点击