【问题标题】:Meaning of "char *_EXFUN(index,(const char *, int));"“char *_EXFUN(index,(const char *, int));”的含义
【发布时间】:2016-09-29 10:39:30
【问题描述】:

我发现这是 eclipse idexer/intelisence 的一个命题,不管它叫什么。就是这样:

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

首先,它看起来像一个返回 char 指针的函数,但参数(如果它是一个函数)在我看来相当混乱。我们如何进入参数列表中的括号。

【问题讨论】:

  • _EXFUN 显然是一个宏——你需要找到它的定义。
  • 在你的头文件中搜索_EXFUN。并尝试在预处理后停止编译器,看看它生成了什么。
  • 顺便问一下,你在哪里找到这行代码的?用户代码中不允许使用诸如_EXFUN 之类的名称,只能在编译器或标准库提供的代码中使用(因为以下划线后跟大写字母开头的名称是为“实现”保留的)。跨度>
  • @JoachimPileborg 来自标准库的一个实现。

标签: c


【解决方案1】:

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

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

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

char * index(const char *, int)

有时会使用此技巧,以便可以将 _EXFUN 设置为其他内容来预处理相同的标头,例如内省函数签名,或在库中声明导出的符号。

【讨论】:

    猜你喜欢
    • 2012-04-19
    • 1970-01-01
    • 2017-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    相关资源
    最近更新 更多