va_list尚未声明

Dav*_*ria 15 gcc compiler-errors g++ variadic-functions

在Fedora 11上编译一些工作代码时,我收到此错误:

/usr/include/c++/4.4.1/cstdarg:56: error: ‘::va_list’ has not been declared
Run Code Online (Sandbox Code Playgroud)

我在用:

[doriad@davedesktop VTK]$ g++ --version
g++ (GCC) 4.4.1 20090725 (Red Hat 4.4.1-2)
Run Code Online (Sandbox Code Playgroud)

有谁知道是什么问题?

小智 35

我有相同的错误消息,我解决了包括下一个文件之一

#include <stdarg.h>
Run Code Online (Sandbox Code Playgroud)

要么

#include <cstdarg>
Run Code Online (Sandbox Code Playgroud)


msw*_*msw 4

在 g++ 4.4 中引入 varadic 宏集具有令人困惑和扭曲的语义。g++ -E broken_code.cpp通过使用和查看预处理器引入的内容,您可能会更好地了解未发生的情况。有几十个 GNU C 预处理器指令可能会阻止声明本身的类型::va_list进行编译__gnuc_va_list__builtin_va_list

垃圾代码:

$cat junk.cpp
#include <cstdarg>

void foo(char *f, ...) { va_list va; va_start(va, va); }
int main(void) { foo("", "", ""); return 0; }
$ g++ junk.cpp
$ g++ --version
g++ (Ubuntu 4.4.1-4ubuntu9) 4.4.1
Run Code Online (Sandbox Code Playgroud)

编译并链接(带有警告),相关输出为g++ -E junk.cpp

# 40 "/usr/lib/gcc/i486-linux-gnu/4.4.1/include/stdarg.h" 3 4
typedef __builtin_va_list __gnuc_va_list;
# 102 "/usr/lib/gcc/i486-linux-gnu/4.4.1/include/stdarg.h" 3 4
typedef __gnuc_va_list va_list;
# 45 "/usr/include/c++/4.4/cstdarg" 2 3
# 54 "/usr/include/c++/4.4/cstdarg" 3
namespace std __attribute__ ((__visibility__ ("default"))) {

  using ::va_list;

}
Run Code Online (Sandbox Code Playgroud)