如果确实需要,可以在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上。

08-06 18:06