【问题标题】:Why surround the function with parentheses?为什么要用括号括住函数?
【发布时间】:2013-06-16 21:23:38
【问题描述】:

我展示了一些我确实理解的代码。

以下代码是示例代码。

static void (_func)(int p);

int main()
{
....
    _func(3);
....
}

static void (_func)(int p)
{
 ....
}

一般我知道用括号括起来的函数是用'*'作为函数指针的(*_func),但是上面的代码为什么在函数声明时用括号括起来?

有什么理由使用这种方法吗?

【问题讨论】:

  • 我知道英语不是您的第一语言,但您应该考虑学习正确的单词。这些符号:( ) 称为“括号”。
  • 感谢 Jonathon Reinhart 让我知道与括号相关的正确单词。
  • “括号”表示多个 (),“括号”表示仅一个 ()

标签: c function function-pointers


【解决方案1】:

在函数名周围加上括号将防止它被同名的类似函数的宏“覆盖”。

例如,有时一个函数可能被实现为一个宏,但它也可能需要被实现为一个实际的函数(一个原因可能是为了获得指向它的指针)。这个 API 的实现者可能会将函数名的声明和实际的函数实现用括号括起来,这样就不会与宏名冲突。

然后,API 的用户可以决定,如果出于某种原因想要使用实际函数而不是宏,他们可以#undef _func 或使用括号中的函数名来避免使用宏。

如C99 7.1.4“库函数的使用”中所述:

在头文件中声明的任何函数都可以另外实现为 头文件中定义的类函数宏,所以如果一个库函数是 在包含其标头时显式声明,其中一种技术 如下所示可用于确保声明不受 这样的宏。可以抑制函数的任何宏定义 通过将函数的名称括在括号中来本地化,因为 然后名称后面不跟左括号,表示 宏函数名称的扩展。出于同样的句法原因,它 允许获取库函数的地址,即使它是 也定义为宏。使用#undef 删除任何宏 定义还将确保引用实际函数。

【讨论】:

    猜你喜欢
    • 2017-11-07
    • 2016-07-21
    • 2017-01-10
    • 1970-01-01
    • 2013-04-23
    • 2011-08-14
    • 2014-08-09
    • 2012-08-03
    相关资源
    最近更新 更多