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

时间:2017-07-05 14:13:57

标签: c++ function

我理解c ++函数需要什么:type name(parameters){statements}。当函数有一个额外的名字时,它叫什么:

_API8810AFUNC int API8810A_GetAPI8810AUSBDeviceCnt(int *pnUSBDeviceCnt);?

_API8810AFUNC定义为:

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

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

1 个答案:

答案 0 :(得分:1)

取决于。

在这种情况下,它是一个宏 - 一个具有非法名称的引导* - 扩展为variable2。我们可以通过Google轻松找到it's a Microsoft attribute for use with DLLs

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

要直接回答您的问题,每个C ++ 14的函数定义的实际语法如下:

函数的定义
attribute-specifier-seq opt decl-specifier-seq opt declarator virt-specifier-seq opt function-body
功能体
ctor-initializer opt compound-statement
功能试块
extern
= default ;

所以它比“type name(parameters){statements}”稍微复杂一些,但你离它不远。

* = delete ; [..] [..] 以下划线后跟大写字母(2.12)开头的每个名称都是保留给任何用途的实现。 [..]