我正在尝试使用Netwide Assembler学习汇编语言.
在教程中,我看到每个函数名称的末尾都有一个,例如:@n
CALL _GetStdHandle@4
CALL _WriteFile@20
CALL _ExitProcess@4
Run Code Online (Sandbox Code Playgroud)
这是什么意思?@n
(它似乎是函数名称的一部分,因为error LNK2001: unresolved external symbol如果我修改或删除该部分,我会收到错误,但显然它不是它生成的C或C++函数名称的一部分.它来自哪里? )
这些是stdcall名字装饰:
名称 - 装饰约定
下划线(_)以名称为前缀.该名称后跟at符号(@),后跟参数列表中的字节数(十进制).因此,声明为的函数int func( int a, double b )装饰如下:_func@12
AC/C++编译器会自动为您处理这个问题(一些汇编程序也是如此),这就是您之前没有看到过的原因.