C ライブラリのヘッダー ファイルを D モジュールに変換していますが、C 文字列をどのように処理すればよいか疑問に思っていました。
DMD 1 を使用すると、次のように動作します。
void f(char* s); // Definition for C library's function.
しかし、DMD 2 (私は個人的に使用していますが、モジュールが両方で機能することを望みます) を使用すると文字列が const になるため、モジュールを使用して同じコードを動作させるには
void f(const(char)* s); // Definition for C library's function.
私は何をすべきか?char*
「クライアント」コードを使用して文字列を変更可能にするだけですか?または、コードをコンパイルするコンパイラのバージョンに応じて型を変更しますか? 前者の場合、それらを変更可能にする最良の方法は何ですか? 私は .dup でそれができると思っていましたが、コンパイラにはそれがありませんでした。後者の場合、どうすればいいですか?私はこれを試しました:
version (D_Version2) {
alias const(char)* charptr;
} else {
alias char* charptr;
}
void f(charptr s);
残念ながら、DMD 2 バージョンは DMD 1 に対して有効なコードではなく、バージョン ブロック内のすべてのコードは、結果の実行可能ファイルにコードが含まれていなくても、コードをコンパイルするコンパイラに対して有効なコードでなければなりません。したがって、現在、コードは両方でコンパイルされますが、最初にエイリアスを変更する必要があります。これは、ご想像のとおり、理想的ではありません。