我展示了一些我确实理解的代码。
下面的代码是示例代码。
static void (_func)(int p);
int main()
{
....
_func(3);
....
}
static void (_func)(int p)
{
....
}
一般来说,我知道用括号括起来的函数是用'*‘表示函数指针作为(*_func)的,但是上面的代码为什么在函数声明时用括号括住函数?
使用这种方法有什么原因吗?
发布于 2013-06-20 08:02:22
用括号括起函数名可以防止它被同名的类函数宏“覆盖”。
例如,有时一个函数可能被实现为宏,但它也可能需要被实现为一个实际的函数(其中一个原因可能是为了获得指向它的指针)。此API的实现者可能会将函数名的声明和实际的函数实现用括号括起来,这样就不会与宏名冲突。
然后,API的用户可以决定,无论出于什么原因,如果他们想要使用实际的函数而不是宏,他们可以使用#undef _func
或使用括号中的函数名来避免使用宏。
如C99 7.1.4“库函数的使用”中所述:
头中声明的任何函数都可以额外实现为头中定义的类似函数的宏,因此,如果库函数在包含其头时显式声明,则可以使用下面所示的技术之一来确保声明不受此类宏的影响。函数的任何宏定义都可以通过将函数的名称括在括号中来在本地取消,因为该名称后面没有表示宏函数名展开的左括号。出于相同的语法原因,允许使用库函数的地址,即使它也被定义为宏。使用#undef删除任何宏定义也将确保引用实际的函数。
https://stackoverflow.com/questions/17206551
复制相似问题