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

lou*_*ear 7 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
Run Code Online (Sandbox Code Playgroud)

另一个是在路径中/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,如果它们有不同的名称,它们会不会更安全/更清晰?

Dip*_*ick 3

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

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

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