c++ 函数中额外的下划线名称

Extra underscored name in a c++ function

本文关键字:下划线 函数 c++      更新时间:2023-10-16

我了解 c++ 函数需要什么:类型名称(参数){语句}。当一个函数有一个额外的名称时,它叫什么,如下所示:

_API8810AFUNC int API8810A_GetAPI8810AUSBDeviceCnt(int *pnUSBDeviceCnt);?

_API8810AFUNC定义为:

#ifdef _BUILD_API8810ADLL
#define _API8810AFUNC  __declspec(dllexport )
#else

"_API8810AFUNC"是否意味着需要以不同的方式调用函数?这在 c++ 中有一个名字吗?

这取决于。

在这种情况下,它是一个宏 - 并且具有非法名称的宏,用于引导* - 扩展到__declspec(dllexport)。我们可以很容易地谷歌一下,发现它是一个用于 DLL 的Microsoft属性

它也可以[有条件地]扩展到无,或者它可以扩展到不同的属性,或者它可以扩展到存储类说明符(如staticextern)。

为了直接回答您的问题,根据 C++14,函数定义的实际语法如下:

function-definition: attribute-specifier-seq opt decl-specifier-seq optdeclarator virt-specifier-seq optfunction-body function-body

   
   ctor-initializeropt复合语句
   function-try-block
   = default ;= delete ;
   

所以它比"类型名称(参数){语句}">要复杂一些,但你离得不远了。


*[C++14: 17.6.4.3.2]:[..][..]以下划线开头后跟大写字母 (2.12) 的每个名称都保留给实现以供任何使用。[..]