为什么用括号括起函数?

时间:2013-06-20 06:19:55

标签: c function function-pointers

我展示了一些我明白的代码。

以下代码是示例代码。

static void (_func)(int p);

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

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

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

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

1 个答案:

答案 0 :(得分:3)

在函数名称周围放置parens将阻止它被具有相同名称的类似函数的宏“覆盖”。

例如,有时函数可能被实现为宏,但它也可能需要实现为实际函数(一个原因可能是可以获得指向它的指针)。该API的实现者可能会将函数名称和实际函数实现的声明与包含在parens中的名称放在一起,这样就不会与宏名称冲突。

然后,API的用户可以决定,无论出于何种原因,他们想要使用实际函数而不是宏,他们可以#undef _func或使用包含在parens中的函数名来避免使用宏。 / p>

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

  

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