c++ - 不同架构下的va_list初始化

标签 c++ gcc standards solaris

  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/

相关文章:

C++将不同的模板化对象存储到同一容器中的任何方式

c - 如何使用匿名结构声明变量

php - PSR-1:2.3。副作用:配置文件中的变量

C++11 : Can anyone suggest some books and compilers? 在我的项目中使用 c++11 是个好主意吗? qt creator 2.5 是否支持 c++11?

c++ - 确保单个实例并为 Windows C++ 控制台应用程序传递参数的正确方法

c++ - 如何将模板类对象作为 C++ 中非模板类的成员?

c++ - 在 C++17 中声明大小为 0 的数组是否合法?

c - 如何从 gcc 限制 C 指令集

c - gnu ld 无法链接 .c 程序

javascript - 像 "__proto__"这样的 javascript 属性名称在 ES5/6 中没有标准化吗?