我正在查看一个只有标头的 C“库”:https ://github.com/zserge/jsmn/blob/master/jsmn.h
据我了解,这段代码将被编译到 .c 文件包含的每个目标文件中jsmn.h
,浪费空间。
(文件的函数定义在里面#ifndef JSMN_HEADER
,因此您可以通过定义 JSMN_HEADER 将其用作“传统”头文件。)
- 为什么没有把它写成“传统”
.c
和.h
配对? - 链接器是否足够聪明,可以在目标文件之间重复功能相同的定义?我会预料到“重复符号”错误。
- 将代码放在标头中会给 C 带来什么好处?(不是 C++。)
#define JSMN_HEADER
如果在导入之前使用,您从哪里获得函数定义?- 只是
jsmn.h
头部是一个聪明的把戏,我可以从中学习吗?