You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Borland C++的bcc32.exe中自定义函数声明的符号名?

在Borland C++ 5.5.1的bcc32.exe中自定义外部函数符号名

问题背景

用bcc32.exe(免费版5.5.1)编译C代码时,外部函数声明会自动加上下划线前缀。比如写extern int answer(int a, int b);,编译出的.obj里符号是_answer,调用时生成call _answer指令。如果需要指定自定义符号(比如无下划线的myanswer),或者要调用DLL里带C/C++保留字的函数(比如char),常规方法无法满足需求。

现有方案的局限性

测试过#pragma alias "_answer" = "myanswer",但这个指令仅在OMF格式的.obj中添加ALIAS记录,编译时生成的调用指令还是call _answer,只有链接器支持ALIAS记录时才能生效,没法直接让编译器生成目标符号的调用。

直接有效的解决方案

bcc32.exe支持在外部函数声明后用__asm关键字直接指定链接符号名,类似GCC的__asm__语法:

  1. 自定义无下划线符号

    extern int answer(int a, int b) __asm("myanswer");
    

    这样编译后,调用answer(6,7)会直接生成call myanswer指令,无需依赖链接器处理别名。

  2. 调用DLL中的保留字函数
    对于DLL里名为char的函数(C/C++保留字,不能直接作为C函数名),可以这样声明:

    extern void char_func() __asm("char");
    

    调用时用char_func(),编译器会生成call char的指令,完美绕开保留字命名限制,也不需要.def文件或导入库。

这种方法直接控制编译器生成的目标代码,比#pragma alias更可靠,完全满足无需额外链接辅助文件导入DLL函数的需求。

内容的提问来源于stack exchange,提问作者pts

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 06:03:21