我正在我的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预编译器之前,您可以考虑在源代码上运行它。不推荐,但它可能会解决问题。