gpt4 book ai didi

c - Linux i386 上的 va_arg 错误

转载 作者:行者123 更新时间:2023-11-30 18:05:37 24 4
gpt4 key购买 nike

我正在 Pro*C 代码中开发 DEBUG 消息打印功能。我在以下行中收到错误:

fmt = va_arg(args, char *);

错误如下:

Syntax error at line 672, column 40, file commonutil_x.pc:
Error at line 672, column 40 in file commonutil_x.pc
fmt = va_arg(args, char * );
.......................................1
PCC-S-02201, Encountered the symbol ")" when expecting one of the following:

( * & + - ~ ! ^ ++ -- ... sizeof, an identifier,
a quoted string, a numeric constant,
The symbol "..." was substituted for ")" to continue.

我的机器操作系统信息如下:

Linux Babo 2.6.9-89.ELsmp #1 SMP Mon Apr 20 10:34:33 EDT 2009 i686 i686 i386 GNU/Linux

但是我在一个小型 C 程序中编写了相同的代码,它被编译并运行。谁能告诉我为什么它在 Pro*C 中不起作用?还在 x86_64 Linux 机器上编译了我的较大 Pro*C 程序,它编译时没有任何错误。以下是有关第二台机器的完整信息:

Linux Habo 2.6.18-128.el5 #1 SMP Wed Dec 17 11:41:38 EST 2008 x86_64 x86_64 x86_64 GNU/Linux

请帮助我为什么它可以在 x86_64 上运行而不能在 i386 上运行?

最佳答案

鉴于您混淆了 32 位 Pro*C 预编译器,但没有混淆 64 位版本,您可能遇到了 Pro*C 预编译器中的错误。

建议:将出现错误的日志记录函数移至单独的纯 C 源文件中,并在不使用 Pro*C 编译器的情况下进行编译。

考虑到错误消息的性质,另一个选项是将 char * 替换为普通类型名称。很明显,Pro*C 预编译器期望 * 是乘法符号,而不是类型名称的一部分。

typedef char *charptr;

fmt = va_arg(args, charptr);

在我看来,这不如分离编译好。

我不确定它是否可行(而且很可能不明智),但您可以考虑在将源代码提交到 Pro*C 预编译器之前对源代码运行 C 预处理器。不推荐,但它可能会解决问题。

关于c - Linux i386 上的 va_arg 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6266337/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com