Skip to content

编译器选项:-entry


覆盖隐式用户主函数的公开导出名称

语法

-entry <name>

参数

name

覆盖隐式用户主函数公开导出名称的自定义名称

描述

-entry 编译器选项更改隐式用户主函数(由 fbc 自动生成为启动代码)的公开导出符号名称。

它影响启动代码和隐式用户主函数,这也受模块是否为主模块的影响。

默认情况下,fbc 在主模块中定义一个公开导出的 'main' 符号,以满足运行时启动系统代码的要求。

目前除了始终分开编译和链接之外,没有其他方法可以覆盖 fbc 对 'main' 符号的使用。

操作步骤:

  • 自定义主函数名称必须仅使用以下签名声明(相同的参数类型、相同的返回类型、相同的调用约定),以便与(基本)主函数兼容:
vb
'' 在内部,隐式主函数现在命名为 "custom_main"
Declare Function custom_main CDecl Alias "custom_main" ( ByVal argc As Long, ByVal argv As ZString Ptr Ptr ) As Long
  • 还必须提供(基本)主函数以满足链接器和启动代码的需求。这可能在另一个库或框架、C、ASM 或 FB 语言中定义,如以下最小代码示例所示:
vb
Function main CDecl Alias "main" ( ByVal argc As Long, ByVal argv As ZString Ptr Ptr ) As Long
    '' .....
    '' 调用自定义主函数
    Return custom_main( argc, argv )
End Function
  • 然后使用 -entry custom_main 选项进行编译。

注意:

此功能正在开发中,将来可能会更改(参见文档论坛中的 Compiler Option: -entry)。

也许将有更好的方式来处理这个问题:一个让用户可以直接指定显式 "main" 的编译器选项。

示例

程序(option_entry.bas)示例,尝试仅展示 FB 语言的最小代码:

vb
'' option_entry.bas:

'' - 演示替代命名的主函数
''   作为隐式用户主函数的替代入口点
'' - 我们也可以分开步骤编译和链接

'' 编译:$ fbc -c -m option_entry option_entry.bas -entry custom_main
'' 编译:$ fbc option_entry.o
'' 或者
'' 编译:$ fbc option_entry.bas -entry custom_main

'' 在内部,隐式主函数现在命名为 "custom_main"
Declare Function custom_main CDecl Alias "custom_main" ( ByVal argc As Long, ByVal argv As ZString Ptr Ptr ) As Long

'' 但我们仍然需要一个 main() 函数来满足链接器和启动代码
'' - 这可能在另一个库或框架中定义
'' - 目前没有,所以让我们在此处定义它来演示
Function main CDecl Alias "main" ( ByVal argc As Long, ByVal argv As ZString Ptr Ptr ) As Long
    '' 只是调用我们的自定义主函数来演示
    Return custom_main( argc, argv )
End Function

'' ---------------------------------
'' 用户隐式主函数的开始
'' 在内部这命名为 "custom_main",将自动被
'' 我们的自定义框架调用

Print "hello"
Sleep

'' 用户隐式主函数的结束
'' ---------------------------------

版本

  • 自 fbc 1.09.0 起

另请参阅

返回 目录

基于 FreeBASIC 官方文档翻译 如有侵权请联系我们删除
FreeBASIC 是开源项目,与微软公司无隶属关系