每个函数名后的@n ("at sign") 是什么?
What is the @n ("at sign") after every function name?
我正在尝试使用 Netwide Assembler 学习汇编语言。
在教程中,我看到每个函数名的末尾都有一个 @n
,例如:
CALL _GetStdHandle@4
CALL _WriteFile@20
CALL _ExitProcess@4
这个@n
是什么意思?
(它似乎是函数名称的一部分,因为如果我修改或删除该部分,我会得到 error LNK2001: unresolved external symbol
错误,但显然它不是 C 或 C++ 函数名称的一部分生成自。它来自哪里?)
Name-decoration convention
An underscore (_
) is prefixed to the name. The name is followed by the at sign (@
) followed by the number of bytes (in decimal) in the argument list. Therefore, the function declared as int func( int a, double b )
is decorated as follows: _func@12
C/C++ 编译器会自动为您处理(有些汇编程序也会),这就是您以前从未见过的原因。
我正在尝试使用 Netwide Assembler 学习汇编语言。
在教程中,我看到每个函数名的末尾都有一个 @n
,例如:
CALL _GetStdHandle@4
CALL _WriteFile@20
CALL _ExitProcess@4
这个@n
是什么意思?
(它似乎是函数名称的一部分,因为如果我修改或删除该部分,我会得到 error LNK2001: unresolved external symbol
错误,但显然它不是 C 或 C++ 函数名称的一部分生成自。它来自哪里?)
Name-decoration convention
An underscore (_
) is prefixed to the name. The name is followed by the at sign (@
) followed by the number of bytes (in decimal) in the argument list. Therefore, the function declared asint func( int a, double b )
is decorated as follows:_func@12
C/C++ 编译器会自动为您处理(有些汇编程序也会),这就是您以前从未见过的原因。