ここでは次のように簡略化されたデバッグ機能があるとします。
void DumpString(char* var, char* varname) {
printf("%s : '%s'\n", varname, var);
}
char str[10]="foobar";
DumpString(str, "str");
> str : foobar
変数を 2 回 (1 回は引用符で囲んで) 渡すという不必要な余分な要件を削除して、簡単にしましょう。
#define VARASSTR(v) #v
void DumpString(char* var) {
printf("%s : '%s'\n", VARASSTR(var), var);
}
char str[10]="foobar";
DumpString(str);
> var : foobar
おっとっと!渡されたものではなく、ローカル変数名を使用します。別の (あまり理想的ではない) 方法を試してみましょう。
#define DumpStr(v) DumpString(v, #v)
void DumpString(char* var, char* varname) {
printf("%s : '%s'\n", varname, var);
}
char str[10]="foobar";
DumpStr(str);
> str : foobar
それはうまくいきます。しかし、関数がもう少し複雑だったらどうでしょう。
void DumpString(char* var, char* varname, int optionalvar=0) {
printf("%s : '%s'\n", varname, var);
printf("blah: %d", optionalvar);
}
マクロをオーバーロードすることはできないため、DumpStr
機能しませんVARASSTR
。.
これをどのように処理できますか (複数の似たような名前の関数/マクロに頼ることなく)。