gpt4 book ai didi

c++ - MSVC 函数分解

转载 作者:行者123 更新时间:2023-11-28 06:15:46 28 4
gpt4 key购买 nike

我有下一个功能:

namespace TEST {
class TEST {
int a;
int b;
};
}

namespace UNION_TEST {
union UNION_TEST {
int a;
int b;
};
}

union UNION_TEST_NEW {
int a;
int b;
};

namespace NAMESPACE_1 {
namespace NAMESPACE_2 {
union UNION_NAMESPACE_2 {
int a, b;
};
}
}


void f1(UNION_TEST::UNION_TEST t, UNION_TEST::UNION_TEST t1) {
return;
}

void f2(UNION_TEST::UNION_TEST t, TEST::TEST c, UNION_TEST::UNION_TEST t1) {
return;
}

void f3(UNION_TEST_NEW u) {
return;
}

void f4(NAMESPACE_1::NAMESPACE_2::UNION_NAMESPACE_2 u, TEST::TEST c, UNION_TEST::UNION_TEST t1) {
return;
}

对应的错位符号是:

0x000034e0  2  .text  ?f1@@YAXTUNION_TEST@1@0@Z
0x00003500 2 .text ?f2@@YAXTUNION_TEST@1@VTEST@2@0@Z
0x00003520 2 .text ?f3@@YAXTUNION_TEST_NEW@@@Z
0x00003530 2 .text ?f4@@YAXTUNION_NAMESPACE_2@NAMESPACE_2@NAMESPACE_1@@VTEST@4@TUNION_TEST@5@@Z

据此http://www.agner.org/optimize/calling_conventions.pdf (第 27 页)我们有 union X -> TX@@,那么为什么函数 f1、f2 末尾没有 @@,以及当与命名空间 union 结束并开始下一个参数时如何区分?

感谢您的关注和帮助。

最佳答案

正如您所观察到的, union 名称 X 被转换为 TX@@ 的声明并不是对您的 MSVC 版本使用的名称改编的正确描述。请注意,“agner.org”与 Microsoft 无关,也不提供官方文档。

至于您的问题,一个错位名称的不同部分是如何分开的,看来单个 @ 就足够了。

关于c++ - MSVC 函数分解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30366113/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com