C标准库的阅读(1)
来源:互联网 发布:sql注入攻击语句 编辑:程序博客网 时间:2024/05/01 09:25
C标准库的阅读(1)
assert.h
1,基本内容
assert.h 里面提供了一个宏 assert(exp) 这个宏指向另一个宏 NDEBUG 如果你在include头文件之前,定义了这个宏 ,那么 assert(exp) 的定义就是 ((void)0) 意思是什么也不做,相当与关闭断言的功能,如果你没有定义这个宏,相当与开启了断言的功能。
2,里面的源码
/* NDEBUG not defined */void _Assert(char *);#define _STR(x) _VAL(x)#define _VAL(x) #x#define assert(test) (test) ? (void)0 : _Assert(__FILE__ ":" _STR(__LINE__) " " #test)/* in xassert.c */#include <assert.h>#include <stdio.h>void _Assert(char *msg) { fprintf(stderr, "%s -- assertion failedn", msg); abort();}
_VAl(X) #X 代表在x的两边加上” 将它字符串化
那么为什么要、
_STR(X) _VAL(X)
_VAL(X) #X
因为 X 可能是一个宏,所以VAL这个宏可能只会把宏的名字给替换成字符串,而不是将宏的内容给替换了。
这就是我看这个源码里面不太懂的地方了
阅读全文
0 0
- C标准库的阅读(1)
- 阅读C标准库的个人体会
- 《C安全编码标准》阅读有感及个人观点(1):PRE00-C
- C标准库(1)
- 21天学通C++--阅读笔记6(模板、标准模板库)
- C++primer阅读笔记---------标准库特殊设施
- C 标准库的 setlocale()
- C标准库的setlocale()
- C标准库的随想
- C++标准库阅读笔记
- C++标准库阅读摘要
- C++标准库 阅读笔记
- C&C++的标准库
- c标准库(4)
- C 标准库(一)
- C 标准库(二)
- SAP-WM标准教程LO140阅读体会(1)
- C标准库源码解剖(1):类型相关的定义
- 集合、迭代器、增强for、集合中泛型的引入
- 前端之HTML相关面试题。
- SpringBoot(二):SpringBoot 热部署
- Rspamd_rule_compromised_hosts.lua自己的理解
- PLL
- C标准库的阅读(1)
- Docker部署web应用
- java设计模式---单例模式篇
- SpringBoot(三):SpringBoot 属性配置文件详解
- 实现翻页或查询后保持复选框勾选状态
- requests库的请求头部信息修改
- 文章标题
- Latex排版全解
- HTML 语法学习