C语言函数调用错误信息打印

错误打印

  • 说明
  • 所需头文件
  • PERROR()
  • STRERROR()
  • 两个宏说明:
    • __FILE__(左右各两个下划线未显示)
    • __LINE__(左右各两个下划线未显示)
  • 其他函数:

说明

我的目的是在程序调用函数的时候,返回错误原因+那个文件内被调用+所在文件行号,如:端口已被使用[to_listen.c:21]
在调试程序的时候,函数返回结果为错误,但是一直不知道是什么原因报的错,我就想到了标准错误。以前没用过,所以自己尝试了一下,找到errno。每次用gdb调试,都是用“p errno”得到错误号,在去百度“linux错误处理与错误号_百度文库”找出对应的宏。接着man出错的那个函数,看他“errors”对应宏素表示的错误。我发现这样很麻烦,因为我需要的就是“表示的错误”的意思。所以我关注了一下“perror()”和“strerror()”函数。一个是直接输出给2号句柄,及标准错误,会在屏幕上立即显示(标准错误未重定向)。一个是返回错误信息的字符串指针,可以选择不输出,也可以更灵活的打印出来。

所需头文件

#include
#include

PERROR()

对于我来说,缺点就是最多只能传一个参数(char*类型),当然也可以不传参。因为参数的限制,一行我只能打印文件名+错误原因。
例子

 21 int tobind=bind(mysocket,(struct sockaddr*)&mysockaddr_in,sizeof(mysockaddr_in));
 22 if(tobind!=0)
 {
 23 perror(__FILE__);
 24 return 0;
 25 }

结果:to_listen.cThe given address is already in use.

STRERROR()

更自由的打印错误,可以不显示不想要的信息,添加自己想要的信息。
例子

 21 int tobind=bind(mysocket,(struct sockaddr*)&mysockaddr_in,sizeof(mysockaddr_in));
 22 if(tobind!=0)
 23 {
 24     printf("ERRO:%s[%s:%d]\n",strerror(errno),__FILE__,__LINE__-3);
 25 return 0;
 26 }

结果:ERRO:The given address is already in use.[to_listen.c:22]

两个宏说明:

各位最好用MSDN等去看一下相关的所有的宏,因为我这里值用到了两个,所以我也只说着两个。

FILE(左右各两个下划线未显示)

当前函数所在文件名字符串

LINE(左右各两个下划线未显示)

此宏所在行数。网上看,因为bind函数在21行,而我宏在24行被使用,所以在printf里我执行了“-3”操作。

其他函数:

error();error_at_line(推荐使用);
如果果味大佬觉得还阔以的话,就点个收藏再点个赞才走吧。

你可能感兴趣的:(成长,标准错误,错误打印,错误信息)