【问题标题】:Avoiding "ISO C99 requires rest arguments to be used"避免“ISO C99 需要使用其他参数”
【发布时间】:2012-07-24 03:32:25
【问题描述】:

使用 gcc 4.6.3(使用 -ansi -pedantic),我得到以下代码:

// Argument counting macro
#define NARGS(...) NARGS_(__VA_ARGS__, 5, 4, 3, 2, 1)
#define NARGS_(_1, _2, _3, _4, _5, _, ...) _

static inline void fi_init_(size_t nargs, fileinfo_t *finfo, ...) {
    // Default fmt/type values
    char* fmt  = "CD";
    int   type = 1000;

    if (nargs == 2) {
        va_list  ap;
        va_start(ap, hdr);
        fmt  = va_arg(ap, char*);
        type = va_arg(ap, int);
        va_end(ap);
    } 

    // Do some junk with it
}

#define fi_init(...) fi_init_(NARGS(__VA_ARGS__)-1, __VA_ARGS__)

调用时:

fileinfo_t out; fi_init(&out);

我收到警告:

警告:ISO C99 要求使用其他参数

调用时:

fileinfo_t out; fi_init(&out, "CF", 2222);

我没有。我怎样才能抑制它?

【问题讨论】:

  • 我以为我明白为什么会发生这些,但显然我不明白。如果可能的话,我想纠正我做错的事情。
  • 顺便说一下,这可能是stackoverflow.com/questions/4100746/…的副本
  • 我看到了那个问题,但我的所有论点都被折叠成省略号,所以我不确定我看到的是否相同。

标签: c gcc c99 gcc-warning variadic-macros


【解决方案1】:

我想我的问题在这里:

#define NARGS(...) NARGS_(__VA_ARGS__, 5, 4, 3, 2, 1)
#define NARGS_(_1, _2, _3, _4, _5, _, ...) _ 

将其更改为:

#define NARGS(...) NARGS_(__VA_ARGS__, 5, 4, 3, 2, 1, 0)
#define NARGS_(_1, _2, _3, _4, _5, _, ...) _ 

好像解决了

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-07
    • 2017-07-09
    • 1970-01-01
    • 2017-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多