1

以下に示すように PRINTF MACRO を定義します。

#if(PRINTF_VERSION & PRINTF_DISABLE)
    #define CYPRINTF
#else
    #define CYPRINTF    printf
#endif

しかし、印刷が無効になっていると、以下の警告が表示されました。

warning: statement with no effect

以下のソリューションを試してみましたが、GCC コンパイラではうまく動作しますが、可変長 MACRO をサポートしていないコンパイラでは動作しません。

#if(PRINTF_VERSION & PRINTF_DISABLE)
    #define CYPRINTF(format, ...)
#else
    #define CYPRINTF    printf
#endif

警告が発行されないように非ログ マクロを変更するにはどうすればよいですか?

ノート:

  1. コンパイルフラグを追加したくありません-Wunused-value
  2. 可変長 MACRO を使用したくありません。
  3. printf が無効になっている場合は、システム パフォーマンスへの影響を避けるために、すべてのコードを削除する必要があります。
4

4 に答える 4

1

gccの診断プラグマを使用できます。そしてこれ

于 2012-12-22T07:39:26.063 に答える
1

解決策は簡単です。マクロを使用しないでください。

#if(PRINTF_VERSION & PRINTF_DISABLE)
int CYPRINTF(const char*, ...)
{ return 0; }
#else
#include <cstdarg>
int CYPRINTF(const char* format, ...)
{
    va_list args;
    va_start(args, format);
    int ret = vprintf(format, args);
    va_end(args);
    return ret;
}
#endif

「format」 __attribute__ を使用して、GCC にフォーマット文字列の型チェックを指示することもできます ( http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.htmlを参照)。

于 2012-12-22T08:24:59.463 に答える