C函数后面多加两条下划线是干啥的?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C函数后面多加两条下划线是干啥的?相关的知识,希望对你有一定的参考价值。

我看到有个C语言程序,在头文件内有预编译命令
#define idxmalloc idxmalloc__
然后调用函数的地方格式是

/* weight per element */

idxtype *elmwgt = idxmalloc(Klocal, "elmwgt");

这个 idxmalloc 是个第三方库中的函数,编译的时候需要打包成*.a文件,我查了下函数定义格式,定义时候函数名后并没有两条下划线

idxtype *idxmalloc(int n, char *msg)



if (n == 0)

return NULL;

return (idxtype *)GKmalloc(sizeof(idxtype)*n, msg);



问题就是为什么头文件要用 “#define idxmalloc idxmalloc__” 重新定义 idxmalloc 而不出错?
难道是因为调用动态库中函数的原因??

c/c++ 标识符 名字允许含下划线,就像一个特殊字母一样。
idxmalloc__ 和 idxmalloc 是不同的名字,前者多了2个字符。

程序员 用 尾巴加2个下划线 作为 特殊类 的名字 是一种 偏好。
就像有人用 一个大写字母开头,后面用小写 的名字 作为 特殊类 的名字 一样,也是 是一种 偏好。
目的是 加强 程序 的 可读性 (程序员 自己 易懂)
参考技术A 命名规则允许有下划线,就是 int a_; 这是合法的追问

什么意思?就是说后面加两条线和不加一样?

追答

不是一样的哦,
int a和int a_,这是两个变量,你就把下划线当作名字的一部分就是了

追问

可是从头文件里面可以看出,程序调用库中函数的名是 idxmalloc__

(预编译命令 #define idxmalloc idxmalloc__ )
这个 idxmalloc__ 函数又在哪里呢?

外部库只能找到 idxmalloc 函数定义……

参考技术B 不是, 因为代码风格问题 不必纠结追问

就算真的不是因为动态库的原因,那么头文件里把 idxmalloc 的调用全部换成 idxmalloc__ ,也应该出错呀?

以上是关于C函数后面多加两条下划线是干啥的?的主要内容,如果未能解决你的问题,请参考以下文章

c语言中啥是宏定义,它是干啥的?

c语言中math.h和dos.h是干啥的

c语言中math.h和dos.h是干啥的

stm32单片机的core_cm3.h库函数是干啥的啊?

Python类中的self到底是干啥的

函数 assert() 是干啥的 包含在哪个库中