指针右侧的调用约定属性

Calling convention attribute on the right of a pointer

在我的编译器打印输出中,函数原型如下所示:

   int (__cdecl*__cdecl _set_new_handler(int (__cdecl*)(unsigned int)))(unsigned int)

我了解到星号左边的__cdecl指定了指针对象的属性。在这种情况下,它是给定指针所引用的函数的调用约定。它类似于 'const char *' 表示指向的数据的不变性,而不是指针本身。我在想为什么同一个星号右边有__cdecl?按照上面的逻辑,它意味着一个指针的属性,比如 'const char * const' 意味着一个常量指针。但是'__cdecl'只适用于函数。

这个声明中有三个函数:

  • _set_new_handler,正在声明的函数;
  • 返回的函数指针;
  • 作为参数的函数指针

第一个 __cdecl 适用于正在返回的函数指针,第二个适用于正在声明的函数。