如果确实需要,可以在C中指定__attribute__((weak))
(请参见scriptedmain)。这样一来,程序就可以兼作API和可执行程序,并允许导入API的代码覆盖主函数。
D有办法吗? Python具有if __name__=="__main__": main()
,但是C中的weak
语法似乎更接近。
最佳答案
是的,使用版本指令,它们需要rdmd和dmd的特殊选项。
scriptedmain.d:
#!/usr/bin/env rdmd -version=scriptedmain
module scriptedmain;
import std.stdio;
int meaningOfLife() {
return 42;
}
version (scriptedmain) {
void main(string[] args) {
writeln("Main: The meaning of life is ", meaningOfLife());
}
}
test.d:
#!/usr/bin/env rdmd -version=test
import scriptedmain;
import std.stdio;
version (test) {
void main(string[] args) {
writeln("Test: The meaning of life is ", meaningOfLife());
}
}
例:
$ ./scriptedmain.d
Main: The meaning of life is 42
$ ./test.d
Test: The meaning of life is 42
$ dmd scriptedmain.d -version=scriptedmain
$ ./scriptedmain
Main: The meaning of life is 42
$ dmd test.d scriptedmain.d -version=test
$ ./test
Test: The meaning of life is 42
也发布在RosettaCode上。