C函数后面多加两条下划线是干什么的?
我看到有个C语言程序,在头文件内有预编译命令#defineidxmallocidxmalloc__然后调用函数的地方格式是/*weightperelement*/idxt...
我看到有个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 而不出错?
难道是因为调用动态库中函数的原因?? 展开
#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 而不出错?
难道是因为调用动态库中函数的原因?? 展开
3个回答
展开全部
命名规则允许有下划线,就是 int a_; 这是合法的
更多追问追答
追问
什么意思?就是说后面加两条线和不加一样?
追答
不是一样的哦,
int a和int a_,这是两个变量,你就把下划线当作名字的一部分就是了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不是, 因为代码风格问题 不必纠结
追问
就算真的不是因为动态库的原因,那么头文件里把 idxmalloc 的调用全部换成 idxmalloc__ ,也应该出错呀?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询