0

最近、私はこのコードに出くわしました:

#define LOG(type, str)                      printf(str)
#define LOG1(type, str,arg1)                printf(str,arg1)
#define LOG2(type, str,arg1,arg2)           printf(str,arg1,arg2)
#define LOG3(type, str,arg1,arg2,arg3)      printf(str,arg1,arg2,arg3)
#define LOG4(type, str,arg1,arg2,arg3,arg4) printf(str,arg1,arg2,arg3,arg4)

コードは最近書かれたものです。なので、C99でコンパイルできると思います。

私の質問は、可変長の引数を持つ単純なマクロを使用しないのはなぜですか? LOG私たちは自分たちをマクロに限定するだけで、それ以上のものは何もありません. LOG5、などを追加する必要がないことは言うまでもありませんLOG6。スタック トレースを取得したり、メモリを使い果たしたり、このソリューションが役立つ何かが発生した場合、何かひどいことが起こるでしょうか?

私はミニマリストです。行数が少ないほどよいのです。しかし、ここで何か不足していますか?これは意図的なものですか、それとも悪いコーディング方法ですか?

4

1 に答える 1

1

可変引数マクロのプリプロセッサ サポートは、私には唯一の正当な理由のように見えます。プロジェクトLOG, LOG1 etcには何十年もありましたが、最近アップグレードし...ました。

ウィキペディアによると:

いくつかのコンパイラは、C および C++ コードのコンパイル時に可変引数マクロをサポートしています: GNU Compiler Collection 3.0、[2] Visual Studio 2005、[3] C++Builder 2006、および Oracle Solaris Studio (以前の Sun Studio) Forte Developer 6 update 2 (C++ バージョン 5.3).[5] GCC は、Objective-C のコンパイル時にこのようなマクロもサポートします。

プラットフォームがわかっている場合は、ファンシーな可変個引数マクロを使用してください。サポートするものが少ない場合、物事はより興味深いものになる可能性があります

于 2013-02-22T09:07:45.890 に答える