可変長引数のデバッグ ログ出力機能に問題が 1 つあります。ここでコードをシミュレートします。
void SecondPrint(int level, const char* format,...)
{
//Printing the log here
va_list arg;
va_start(arg, format);
vprintf(format, arg);
va_end(arg);
}
void FirstPrint(int level, const char* format,...)
{
SecondPrint(level,format);
}
void main()
{
int level = 100;
FirstPrintf("Log level = %d message = %s \n",level,"Error message");
}
「SecondPrint」は、期待どおり「100 エラー メッセージ」を出力するはずですが、そのように印刷されず、「エラー メッセージ」が出力されます。
私はこれで何が悪いのか分かりません。「FirstPrint」関数から「SecondPrint」を呼び出す方法を疑っています。FirstPrint は ... を介して残りの引数を受け取りますが、レベルとフォーマットの引数を指定して SecondPrint を呼び出します。
メインから SecondPrint を直接使用することはできません。FirstPrint を使用する必要があり、FirstPrint は SecondPrint を呼び出してログを印刷する必要があります。では、どうすればこれを達成できますか.. VA_ARGSを使用することを考えましたが、関数定義ではなくマクロ定義のみです。
そして、* #define FirstPrint(a,b,...) SecondPrint(a,b,...) *のようにできないことがもう 1 つあります。
事前に感謝します。