"char *_EXFUN(index,(const char *, int));" 的意思是什么?

11

我发现这是一个关于eclipse idexer/intelisence(不管怎么称呼)的建议。以下是建议内容:

char *_EXFUN(index,(const char *, int));

一开始看起来像是一个返回char指针的函数,但是如果这真的是一个函数的话,它的参数对我来说相当令人困惑。为什么参数列表中会有括号。


2
"_EXFUN" 显然是一个宏 - 你需要找到它的定义。 - Paul R
搜索您的头文件以查找“_EXFUN”。尝试在预处理后停止编译器并查看它生成了什么。 - Some programmer dude
顺便问一下,你在哪里找到这行代码的?像 _EXFUN 这样的名称不允许在用户代码中使用,只能在编译器或标准库提供的代码中使用(因为以下划线后跟大写字母开头的名称被保留给“实现”)。 - Some programmer dude
它来自标准库的实现。 - Kuba hasn't forgotten Monica
1个回答

20

_EXFUN 似乎是一些平台上标准头文件中使用的宏,例如这里

#ifndef _EXFUN
# define _EXFUN(N,P) N P
#endif

因此,char *_EXFUN(index, (const char *, int)); 展开为

char * index(const char *, int)

有时会使用这个技巧,以便可以使用_EXFUN设置其他参数来预处理相同的头文件,例如用于内省函数签名或在库中声明导出符号。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接