Ora * C PCC-S-02201,在遇到以下任何一种情况时遇到符号“L”:

时间:2011-12-12 16:29:08

标签: c gcc oracle10g cygwin

在使用cygwin的Windows中运行Pro * C时遇到此问题

Syntax error at line 104, column 31, file C:\cygwin\usr\include\machine/_default_types.h:
Error at line 104, column 31 in file C:\cygwin\usr\include\machine/_default_types.h
#elif  defined(LLONG_MAX) && (LLONG_MAX > 0x7fffffff)
..............................1
PCC-S-02201, Encountered the symbol "L" when expecting one of the following:

config pcscfg.cfg文件如下所示:

sys_include=
(C:\cygwin\usr\include,C:\Oracle\product\10.2.0\client_1\precomp\public,C:\cygwin\usr\include\sys,C:\cygwin\lib\gcc\i686-pc-cygwin\4.5.3\include)

ltype=short

define=(ORASTDARG)

code=kr_c 

parse=partial

谢谢!

2 个答案:

答案 0 :(得分:1)

考虑使用

#ifdef ORA_PROC
    #include <apparently_evil_include_file.h>
#endif

压制包含邪恶之物的包含, 作为一种可能的解决方法。

它有效地隐藏了Pro * c预处理器中的include,同时让它可以用于编译器。

你也可以对metalink进行一些研究。

答案 1 :(得分:0)

警告:推测如下。

它抱怨的代码,文件_default_types.h的第104行第31行是:

#elif  defined(LLONG_MAX) && (LLONG_MAX > 0x7fffffff)
                              ^ column 31

LLONG_MAX<limits.h>中定义。在Cygwin上,定义是:

#define LLONG_MAX __LONG_LONG_MAX__

指的是:

#ifndef __LONG_LONG_MAX__
#define __LONG_LONG_MAX__ 9223372036854775807LL
#endif

long long的类型和LL整数常量的long long后缀是C99中的新功能。在C99之前的C中(除非它被支持作为扩展名),9223372036854775807LL将是语法错误。我可以想象,解析器可能会将其解释为语法上有效的常量9223372036854775807L,后跟L。 (这实际上不是正确的解释,但无论如何它都是语法错误。)

我还没有使用过Ora * C,但我的猜测是它必须解析它的输入代码,它是C和SQL的组合,产生纯C输出。 (这是正确的吗?)如果Ora * C解析器不理解类型long long...LL字面值,它可能会产生您正在看到的那种错误。< / p>

真正引起我怀疑的是pcscfg.cfg文件中的这一行:

code=kr_c

这可能告诉Ora * C将其输入视为K&amp; R风格(即预标准)C代码。请查阅您的文档,看看是否可以选择告诉它处理C99代码,或至少比K&amp; R C更现代的东西。

This web page表明code=ansi_c是公认的选项。试试吧。

或者是来自C编译器的错误是由Ora * C调用的?您使用的是什么C编译器?如果它不是gcc,你可以将其配置为使用gcc吗?