c++ 编译 函数名

xxhhwt 2011-06-01 10:32:06
通过vc来编写一个dll,在dll中有以下两个函数
extern "C" __declspec(dllexport) void _cdecl show1(int x,double y)
extern "C" __declspec(dllexport) void _stdcall show2(int x,double y)

编译后的结果中,show2的函数名发生了改变,为_show2@12,这个可以理解,
但是show1函数,结果显示的是:show1 = @ILT+0(_show1),到底最终的函数名是show1,还是括号中的_show1?
...全文
160 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
小小攻城师 2011-06-01
  • 打赏
  • 举报
回复
http://www.cppblog.com/kovenzgf/archive/2010/11/05/132590.aspx
这篇文章里面有讲,_cdecl最终的函数名就是下划线+函数名,_stdcall最终的函数名是下划线+函数名+@+参数的字节数。
所以show1的函数名就是_show1
bdmh 2011-06-01
  • 打赏
  • 举报
回复
添加一个def文件,在那里规定输出 函数名
咖啡错过糖 2011-06-01
  • 打赏
  • 举报
回复
不懂~路过标记一下
maoxing63570 2011-06-01
  • 打赏
  • 举报
回复
建议用def文件
  • 打赏
  • 举报
回复
这个都是编译器来决定名字改变的规则

给你推荐本比较好的书:
程序员的自我修养,装载、链接与库,里面有很清晰的讲
xxhhwt 2011-06-01
  • 打赏
  • 举报
回复
我一直觉得自己有点钻牛角尖了
也许这个问题根本就没有解答的必要,只是有时候
一个问题看到两个答案的时候,自己也拿不准,不想敷衍过去。
xxhhwt 2011-06-01
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 huiguixian 的回复:]

http://www.cppblog.com/kovenzgf/archive/2010/11/05/132590.aspx
这篇文章里面有讲,_cdecl最终的函数名就是下划线+函数名,_stdcall最终的函数名是下划线+函数名+@+参数的字节数。
所以show1的函数名就是_show1
[/Quote]
我就是看到了两篇文章,两者所讲的不一致,我才过来求证下哪个正确的。
xxhhwt 2011-06-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 namelij 的回复:]

这个都是编译器来决定名字改变的规则

给你推荐本比较好的书:
程序员的自我修养,装载、链接与库,里面有很清晰的讲
[/Quote]
非常感谢你再次回答我的问题
我也知道这个函数名的最终生成和编译器有关
只是有个地方看到别人说vc对于extern "C",_cdecl的函数最终是不改变函数名的
但是有看到有人说对于extern "C",_cdecl的函数最终的函数名是在前面加下划线_,所以
我就自己编了个小例子看下,结果发现前面写的函数名没变,后面又加了个下划线......
就像这样:show1 = @ILT+0(_show1)

65,184

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧