我正在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.
我的机器os信息如下:
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上工作?
答案 0 :(得分:0)
鉴于您已经混淆了32位Pro * C预编译器而不是64位版本,您可能已经遇到了Pro * C预编译器中的错误。
建议:将提供错误的日志记录功能移动到单独的纯C源文件中,并在没有Pro * C编译器的情况下进行编译。
考虑到错误消息的性质,另一个选项是用普通类型名称替换char *
。很明显,Pro * C预编译器期望*
是乘法符号而不是类型名称的一部分。
typedef char *charptr;
fmt = va_arg(args, charptr);
在我看来,这不如分离编辑那么好。
我不确定它是否可行(并且很可能是不合理的),但您可以考虑在将源代码处理器提交给Pro * C预编译器之前在源上运行C预处理器。不推荐,但它可能会解决问题。