c - 为什么不同的标题具有相同的名称?

标签 c gcc

我有几个副本,比方说,stddef.h在我的系统上,一个在路径 /usr/include/linux/stddef.h 中,看起来像这样:

#ifndef _LINUX_STDDEF_H
#define _LINUX_STDDEF_H

#undef NULL
#if defined(__cplusplus)
#define NULL 0
#else
#define NULL ((void *)0)
#endif

#endif

另一个在路径 /usr/lib/i386-linux-gnu/gcc/i686-linux-gnu/4.5/include/ 中,这就是我说 #include <stddef.h> 时使用的那个.那个的内容和第一个有很大的不同,包含了ptrdiff_t的定义。 , size_t等等

我的问题是:据我所知,C/C++ 标准要求 size_t 的定义应该放在stddef.h ,但是第一个不遵循这一点。那个显然不是 C/C++ 标准提到的那个。如果该文件用于其他目的,为什么这两个文件都命名为 stddef.h , 如果他们有不同的名字,不是更安全/更清楚吗?

最佳答案

linux 内核不与 c 标准库链接,因此 - 作为一般规则 - 不能安全地使用标准包含文件,因此 linux 内核使用它自己的包含文件,这些文件不依赖于 c 库函数或数据。

任何要在内核空间中运行的软件 - 例如内核模块 - 都应该使用 include/linux 文件而不是标准库文件。

显然,内核包含文件仅涵盖内核中可能需要的内容,因此是标准 c 包含文件的一个非常小的子集。

关于c - 为什么不同的标题具有相同的名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6741778/

相关文章:

c - 为什么这段代码会删除前 3 个字符?

c - 使用 gcc "define but not used"说明符时收到 "__thread"警告

c - 操作系统 : C scripts compile but I'm having a linker error

c - MPICH:MPICC ld:找不到文件:/usr/local/lib/gcc/4.9/libgfortran.3.dylib for architecture x86_64

c - 条件问题时做

c - c中的全局变量声明

linux 链接器 : '-lpng' inhibits '-lz' ?

c++ - 关于这个在 Linux 上用 gcc 编译的程序中的 vtable,nm 告诉我什么?

c - 为条形码读取器读取数据并将其写入缓冲区的最佳方法是什么?

python3 堆栈粉碎 - python 用 c 扩展