6

このGCC警告はどういう意味ですか?

cpfs.c:232:33: warning: ISO C99 requires rest arguments to be used

関連する行は次のとおりです。

__attribute__((format(printf, 2, 3)))
static void cpfs_log(log_t level, char const *fmt, ...);

#define log_debug(fmt, ...) cpfs_log(DEBUG, fmt, ##__VA_ARGS__)

log_debug("Resetting bitmap");

最後の行は、関数実装内の行232です。コンパイラフラグは次のとおりです。

-g -Wall -std=gnu99 -Wfloat-equal -Wuninitialized -Winit-self -pedantic
4

3 に答える 3

8

はい、それはあなたがそれを定義した方法で少なくとも2つの引数を渡さなければならないことを意味します。あなたはただすることができます

#define log_debug(...) cpfs_log(DEBUG, __VA_ARGS__)

そして、, ##コンストラクトのgcc拡張も避けます。

于 2010-07-31T14:56:42.383 に答える
1

これは、log_debugに2番目の引数を渡していないことを意味します。パーツに1つ以上の引数...が必要ですが、ゼロを渡しています。

于 2010-07-31T14:43:22.900 に答える
1

以下に定義するSNAP_LISTEN(...)マクロで(C ++ではありますが)同様の問題が発生しています。私が見つけた唯一の解決策は、args ...パラメーターを含まない新しいマクロSNAP_LISTEN0(...)を作成することです。私の場合、別の解決策は見当たりません。-Wno-variadic-macrosコマンドラインオプションは、可変個引数の警告を防ぎますが、ISOC99の警告は防ぎません。

#define SNAP_LISTEN(name, emitter_name, emitter_class, signal, args...) \
    if(::snap::plugins::exists(emitter_name)) \
        emitter_class::instance()->signal_listen_##signal( \
            boost::bind(&name::on_##signal, this, ##args));

#define SNAP_LISTEN0(name, emitter_name, emitter_class, signal) \
    if(::snap::plugins::exists(emitter_name)) \
        emitter_class::instance()->signal_listen_##signal( \
            boost::bind(&name::on_##signal, this));

編集:コンパイラバージョン

g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

編集:コマンドラインの警告

set(CMAKE_CXX_FLAGS "-Werror -Wall -Wextra -pedantic -std=c++0x
  -Wcast-align -Wcast-qual -Wctor-dtor-privacy -Wdisabled-optimization
  -Wformat=2 -Winit-self -Wlogical-op -Wmissing-include-dirs -Wnoexcept
  -Wold-style-cast -Woverloaded-virtual -Wredundant-decls -Wshadow
  -Wsign-promo -Wstrict-null-sentinel -Wstrict-overflow=5 -Wswitch-default
  -Wundef -Wno-unused -Wno-variadic-macros -Wno-parentheses
  -fdiagnostics-show-option")

-Wno-variadic-macros自体は、可変個引数が受け入れられないというエラーが発生しないため、機能します。ただし、MattJoinerと同じエラーが発生します。

cpfs.c:232:33: warning: ISO C99 requires rest arguments to be used
于 2012-10-14T07:31:17.830 に答える