はい、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に掲載。
技術的には、メインを上書きするのではなく、条件付きコンパイルを使用しています。それは '#ifdef'に近いものから' __attribute__'に近いものです。 – RedX
バージョンステートメントでラップされた 'pragma(startaddress、foo)'を使って、バージョンでの主な関数をラップせずに同じ結果を得ることができます –
@ratchetfreak Cool!その使用法の完全な例を挙げてください。 – mcandre