[2017.4.14] 随笔一 ------头文件中用宏定义调试语句(引用C语言写爬虫的初学项目)...

news/2024/7/7 12:32:00

C语言刚学完的随笔。

1.学会在头文件中用宏定义调试语句

#define SPIDER_LOG(level, format, ...) do{ \

    if (level >= g_conf->log_level) {\

        time_t now = time(NULL); \

        char msg[MAX_MESG_LEN]; \

        char buf[32]; \

        sprintf(msg, format, ##__VA_ARGS__); \

        strftime(buf, sizeof(buf), "%Y%m%d %H:%M:%S", localtime(&now)); \

        fprintf(stdout, "[%s] [%s] %s\n", buf, LOG_STR[level], msg); \

        fflush(stdout); \

    } \

    if (level == SPIDER_LEVEL_ERROR) {\

exit(-1); \

    } \

} while(0)

 

2、关于格式书写的原因

1: 因为宏语句不能有\n(这样就会变成两句,但是写成代码段的形式, 则使用\来连接两句话,显得会很好看)

2: 之所以使用do while语句是因为通常定义的宏,在引用的时候后面需要加一个分号(;)但是一段正常的代码EG if(a=0)  sentence;  if () sentence; 我们习惯已经加了分号。为了避免出错,我们引用do while语句,这样可以自然而然在主函数中加分号,而这个语句不需要循环,所以是do while(0)即只执行一次。

 

3、level具体用法:

类似于printf的调试语句,根据level的不同,可以在配置文件中对于这个宏进行打开和关闭。

其中level这个位置可以写

#   0 DEBUG

#   1 INFO

#   2 WARN

#   3 ERROR

#   4 CRIT

然后

format是输入输出格式就是写“THIS IS %d”这种东西,后面的...是变参

4、##__VA_ARGS__,sprintf,strftime详解

eg:

#define debug(...) printf(__VA_ARGS__)  

sprintf(msg, format, ##__VA_ARGS__);

 在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。

缺省号代表一个可以变化的参数表。使用保留名 __VA_ARGS__ 把参数传递给宏。当宏的调用展开时,实际的参数就传递给 printf()了。

 

strftime,是一种计算机函数strftime() 函数根据区域设置格式化本地时间/日期,函数的功能将时间格式化,或者说格式化一个时间字符串。

函数原型:我们可以使用strftime()函数将时间格式化为我们想要的格式。它的原型如下:

size_t strftime(

char *strDest,

size_t maxsize,

const char *format,

const struct tm *timeptr

);

函数strftime()的操作有些类似于sprintf():识别以百分号(%)开始的格式命令集合,格式化输出结果放在一个字符串中。

格式命令列在下面,它们是区分大小写的。(具体去 man)

%a 星期几的简写

%A 星期几的全称

%b 月份的简写

%B 月份的全称

等等

语法

strftime(format,timestamp)参数 描述

format 可选。规定如何返回结果。

timestamp 可选。

转载于:https://www.cnblogs.com/SsoZhNO-1/p/6708031.html


http://www.niftyadmin.cn/n/3141274.html

相关文章

JQuery对数组的一些操作总结

$.each(array, [callback]) 遍历 不同于例遍 jQuery 对象的 $.each() 方法,此方法可用于例遍任何对象(不仅仅是数组哦~). 回调函数拥有两个参数:第一个为对象的成员或数组的索引, 第二个为对应变量或内容. 如果需要退出 each 循环可使回调函数…

python萌新:从零基础入门到放弃

不管是在什么领域,自学者都占绝大多数,你说自学可以吗?可以,没问题的,只需要你具备以下几点最基础的能力:  第一点:天赋。对于python而言其实是非常需要天赋的,很多人觉得只需要拿…

CHAPTER 1 ----- a tour of computer sysytems(1)

1.1Information is bits context. All information in a system——including disk files,programs stored in memory ,user data stored in memory ,and data transferred across a network——is represented as a bunch of bits.The only thing that distinguished differe…

关于Linux磁盘分区与双系统

Linux是一个很大的东西,而且稍微按照鸟哥的书做点网络上的扩展就会有很多很多的东西,常常会使得自己迷失,所以我认为在学习的时候,还是应该有自己的目标,写出关于目标的博客,不要什么都讲,却什么…

手把手教你如何新建scrapy爬虫框架的第一个项目(下)

前几天小编带大家学会了如何在Scrapy框架下创建属于自己的第一个爬虫项目(上),今天我们进一步深入的了解Scrapy爬虫项目创建,这里以伯乐在线网站的所有文章页为例进行说明。在我们创建好Scrapy爬虫项目之后,会得到上图…

01. 机器学习基础

2019独角兽企业重金招聘Python工程师标准>>> # 机器学习基础 # 线性回归模型import numpy as np import matplotlib.pyplot as plt import tensorflow as tf# 从0到10取30个值 data_x np.linspace(0, 10, 30)# np.random.normal(0, 1, 30): 噪声,从0到1…

bash1---基本0

最近在看《高级BASH脚本编程》,边学习脚本编程,边学习Linux的命令。 另外还解决了笔记本电脑上关于Ubuntu无法找到wifi适配器的问题。具体看我另外一篇博客。 另外推荐一个学习linux命令的网站。 今天主要想讲一下如何备份最后一天所有修改的文件 #!/bin…

效能改进之项目例会导入实践

众所周知,在项目管理的过程中,我们需要非常注重沟通,而每日例会作为沟通管理中的一项最佳实践,非常适配互联网项目短频快的特点。成功地在项目中建立例会制度,能带来以下好处: 1)让研发人员相互…