c - 为什么特定的 C 数据类型在多个标准头文件中声明?

标签 c dry

例如,C11 规定 size_t 应在以下头文件中声明:

  • stddef.h
  • stdio.h
  • 标准库.h
  • 字符串.h
  • 时间.h
  • uchar.h
  • wchar.h

在阅读C11时,我发现在不止一个标准头文件中声明了很多其他数据类型。

问题

  1. 让我们以 size_t 为例。为简单起见,为什么不直接放在 stddef.h 中?
  2. 假设 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/

相关文章:

c - 如何在该 MIPS 代码的基本数组中存储偏移量?

c - 管道允许多个进程读取相同的数据

Cooja - C 中的预期声明说明符

c - 在启动时自动加载模块和目标文件

xslt - 通过 'if' 测试和 'value-of' 选择保持 XSLT 代码干燥

c# - 使用 DTO 和实体是否违反 DRY 原则?

django - 在多个 django 模板文件中显示相同 html block 的最佳 DRY 方法

javascript - 如何将我的 jquery/javascript 函数重新编码为更通用并且不需要唯一标识符?

c - 不需要的跳转中断 MPLAB X IDE v.3.30

python - Django 模板如果类型添加到 html id