例如,C11 规定 size_t
应在以下头文件中声明:
- stddef.h
- stdio.h
- 标准库.h
- 字符串.h
- 时间.h
- uchar.h
- wchar.h
在阅读C11时,我发现在不止一个标准头文件中声明了很多其他数据类型。
问题
- 让我们以
size_t
为例。为简单起见,为什么不直接放在stddef.h
中? - 假设 C 编译器在这些头文件中实现了
size_t
。它们是否保证在这些头文件中具有相同的定义?
最佳答案
作为在 stdio.h
中声明的函数示例需要预先声明 size_t,请考虑 snprintf()
.事实上,如果你想在你的代码中使用它,你需要做的就是 #include <stdio.h>
.如果 size_t 仅在 stddef.h
中声明, 你必须
#include <stddef.h>
#include <stdio.h>
不仅如此,自从stdio.h
声明 snprintf
无论您是否使用它,每次您都需要在stdio.h
中包含两个 文件任何避免编译器错误; stdio.h
会人为依赖 stddef.h
.这会导致您的源代码变得更长且更脆弱(请注意,如果您颠倒这两个指令的顺序,它也会中断)。相反,我们编写头文件使它们独立并且不依赖于其他头文件,这就是 C 标准化委员会为标准库做出的决定。
关于c - 为什么特定的 C 数据类型在多个标准头文件中声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25326124/