私は、かなり一般的なマクロであると想像するものを書きたいと思っています。次の形式のマクロの束を定義することにより、多くのPOSIXプログラムで繰り返される「-v」オプションをエミュレートしたいと思います。
#define V1(str, ...) if(optv >= 1){printf("%s: "str,prog,__VA_ARGS__);}
int main(int argc, char* argv[])
{
// ... stuff ...
int i = 1;
V1("This contains a variable: %d\n",i);
}
// Output:
// ./program: This contains a variable: 1
ここoptv
で、コマンドラインで見つかった「-v」オプションの数をカウントしprog
、プログラム名を含みます(どちらも表示されていません)。これはうまく機能しますが、問題は変数を使用する必要があることです。V1("Output")
コンパイラエラーが発生します。私はいつでも使うことができV1("Output%s","")
ましたが、よりクリーンな解決策があるはずです。