系列文章目录
文章目录
- 前言
- 一、调试打印输出开关
- 1.1宏定义应用
- 二、打印错误的函数
- 2.1 perror()
- 2.2 strerror()
- 三、示例
- 总结
前言
一、调试打印输出开关
1.1宏定义应用
示例1:
#define DEBUG_ON 0
#if DEBUG_ON
#define DEBUG(...) qDebug(__VA_ARGS__)
#else
#define DEBUG(...)
#endif
示例2:
#define DEBUG(fmt, ...) printf(fmt, ##__VA_ARGS__)
二、打印错误的函数
2.1 perror()
函数原型: void perror(const char *s);
函数作用: 该函数是把errno的错误映射为字符串,然后在前面拼接字符串s和一个冒号(应该是空格+冒号),最后在标准输出上显示。
2.2 strerror()
函数原型: char *strerror(int errnum);
函数作用: 接受一个表示错误代码的整型值,返回错误代码对应的信息字符串;
三、示例
示例1:
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <string.h>
#include <errno.h>int main(int argc, char** argv)
{int fd;fd=open("file_not_exist", O_RDWR);printf("ererno=%d\n",errno);printf("strerror:%s\n",strerror(errno));perror("perror");exit(EXIT_SUCCESS);
}
运行结果:
可以看到strerror的结果必须使用printf等才能在标准输出上显示,而perror直接显示,各有各的适用场景,perror相对来说简单高效一些,一个函数就能够把错误显示在标准输出上,而strerror则相对灵活一些,有些时候我们还可能要把错误信息提供到别的地方,例如显示在其他界面,或者写入日志、数据库等,这个时候就像处理字符串一样方便。
示例2:
perror("socket") ;fprintf(stderr,"Error:%s\n",strerror(errno));printf("%s\n",strerror(0));printf("%s\n",strerror(1));printf("%s\n",strerror(2));printf("%s\n",strerror(3));printf("%s\n",strerror(errno));
运行结果: