有没有办法在 D 编程语言中重写模块的 main 函数?
如果确实需要,可以在 C 中指定 __attribute__((weak)) (请参阅 scriptedmain)。这使得程序可以兼作 API 和可执行文件,从而允许导入 API 的代码覆盖 main 函数。
D有办法吗? Python 有 if __name__=="__main__": main()
,但 C 中的 weak
语法似乎更接近。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
是的,使用版本指令,这需要 rdmd 和 dmd 的特殊选项。
scriptedmain.d:
test.d:
示例:
也发布在 RosettaCode 上。
Yes, using version directives, which require special options to rdmd and dmd.
scriptedmain.d:
test.d:
Example:
Also posted on RosettaCode.
我相信 __attribute__((weak)) 是一个 GNU 扩展,它为弱链接发出特殊的链接器指令,因此它是特定于工具链的。 AFAIK 中的 DMD 中没有任何内容,但其他 D 编译器(GDC 或 LDC)可能支持其后端扩展。
I believe
__attribute__((weak))
is a GNU extension which emits special linker instructions for weak linking, so it's very toolchain-specific. There is nothing in DMD for this AFAIK, but other D compilers (GDC or LDC) may support their backends' extensions.IIRC 有一种方法可以将代码编译为库而不是目标文件。由于链接器搜索内容的方式,您可以使用它来获得相同的效果;只需将目标与您要首先使用的主目录放在链接顺序中即可。
IIRC there is a way to get code to compile to a library rather than an object file. Because of the way the linker searches for things, you can use that to get the same effect; just put the target with the main you want to use first in the link order.