每个函数名后的@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++ 函数名称的一部分生成自。它来自哪里?)

那些是stdcall name decorations:

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++ 编译器会自动为您处理(有些汇编程序也会),这就是您以前从未见过的原因。