va_list args = 0;
我在我的应用程序中找到了上面的代码,并且它在以下 gcc 版本中编译正常。
~ $ /usr/sfw/bin/gcc -v
Reading specs from /usr/sfw/lib/gcc/sparc-sun-solaris2.10/3.4.3/specs
Configured with: /sfw10/builds/build/sfw10-patch/usr/src/cmd/gcc/gcc-3.4.3/configure --prefix=/usr/sfw --with-as=/usr/ccs/
bin/as --without-gnu-as --with-ld=/usr/ccs/bin/ld --without-gnu-ld --enable-languages=c,c++ --enable-shared
Thread model: posix
gcc version 3.4.3 (csl-sol210-3_4-branch+sol_rpath)
但是当我在新机器上编译相同的代码时,它出现了问题,因为 va_list args 初始化为零。希望 va_list 是某种类型的定义,我用零删除了 va_list 的初始化,它在新机器上编译得很好。
幸好新旧机器的gcc版本相同。
NEW MACHINE GCC VERSION:
Reading specs from /usr/sfw/lib/gcc/i386-pc-solaris2.10/3.4.3/specs
Configured with: /builds/sfw10-gate/usr/src/cmd/gcc/gcc-3.4.3/configure --prefix=/usr/sfw --with-as=/usr/sfw/bin/gas --with-gnu-as --with-ld=/usr/ccs/bin/ld --without-gnu-ld --enable-languages=c,c++ --enable-shared
Thread model: posix
gcc version 3.4.3 (csl-sol210-3_4-branch+sol_rpath)
但我注意到两台机器的架构不同。这会导致任何问题吗?
因为 stdarg 是一个标准库。那么为什么它会因架构而异?
最佳答案
va_list
不应该被初始化。在调用 va_start()
之前,它只是保持未初始化状态,这是 C 和 C++ 中的标准。
您的旧代码已损坏。无论您在哪个平台上,只需删除 =0
,然后重试。
关于c++ - 不同架构下的va_list初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37051570/