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 而不出错?
难道是因为调用动态库中函数的原因??
idxmalloc__ 和 idxmalloc 是不同的名字,前者多了2个字符。
程序员 用 尾巴加2个下划线 作为 特殊类 的名字 是一种 偏好。
就像有人用 一个大写字母开头,后面用小写 的名字 作为 特殊类 的名字 一样,也是 是一种 偏好。
目的是 加强 程序 的 可读性 (程序员 自己 易懂) 参考技术A 命名规则允许有下划线,就是 int a_; 这是合法的追问
什么意思?就是说后面加两条线和不加一样?
追答不是一样的哦,
int a和int a_,这是两个变量,你就把下划线当作名字的一部分就是了
可是从头文件里面可以看出,程序调用库中函数的名是 idxmalloc__
(预编译命令 #define idxmalloc idxmalloc__ )
这个 idxmalloc__ 函数又在哪里呢?
外部库只能找到 idxmalloc 函数定义……
就算真的不是因为动态库的原因,那么头文件里把 idxmalloc 的调用全部换成 idxmalloc__ ,也应该出错呀?
以上是关于C函数后面多加两条下划线是干啥的?的主要内容,如果未能解决你的问题,请参考以下文章