C 开头双下划线的含义
在标准库(glibc)中,我看到使用前导双下划线定义的函数,例如C 开头双下划线的含义,c,linux,gcc,x86-64,glibc,C,Linux,Gcc,X86 64,Glibc,在标准库(glibc)中,我看到使用前导双下划线定义的函数,例如sys/mman.h中的\uu mmap。目的何在?我们怎么还能调用一个似乎在任何地方都没有声明的函数mmap。我的意思是我们包括了sys/mman.h,但是sys/mman.h没有声明mmap,它只声明了GNU手册中的\uu mmap: 除本手册中记录的名称外,保留名称 包括所有外部标识符(全局函数和变量) 以下划线(“”)和所有标识符开头,不考虑使用 以两个下划线或一个下划线后跟 大写字母是保留的名称。这是为了图书馆和图书馆 头
sys/mman.h
中的\uu mmap
。目的何在?我们怎么还能调用一个似乎在任何地方都没有声明的函数mmap
。我的意思是我们包括了sys/mman.h
,但是sys/mman.h
没有声明mmap
,它只声明了GNU手册中的\uu mmap
:
除本手册中记录的名称外,保留名称
包括所有外部标识符(全局函数和变量)
以下划线(“”)和所有标识符开头,不考虑使用
以两个下划线或一个下划线后跟
大写字母是保留的名称。这是为了图书馆和图书馆
头文件可以为内部文件定义函数、变量和宏
目的不存在与用户程序中的名称冲突的风险
这是C和C++厂商使用的一种约定。
具有领先的双下划线的名称被内部实现,供实现(编译器/标准库等)使用。它们不应该出现在代码中。此保留名称空间的目的是提供它们可以使用的系统头名称,而不会与程序中使用的名称发生潜在冲突。
双下划线:(问题表示C++,但<代码> < <代码>也来自ANSI C标准)。此外,在我的
sys/mman.h
版本中,定义了mmap
。\uu mmap
未由glibc在任何地方声明。不知道你在说什么。你是在看内核头,不是glibc头吗?我喜欢你对我很好的回答。