Linux i386上的c-va_rg错误



我正在我的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);

在我看来,这不如把汇编分开好。

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

最新更新