Ora*C PCC-S-02201,遇到符号;L";当预期出现以下情况之一时:

Ora*C PCC-S-02201,遇到符号;L";当预期出现以下情况之一时:,c,gcc,oracle10g,cygwin,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_M

使用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
谢谢

考虑使用

#ifdef ORA_PROC
    #include <apparently_evil_include_file.h>
#endif
#ifdef ORA#u PROC
#包括。

考虑使用

#ifdef ORA_PROC
    #include <apparently_evil_include_file.h>
#endif
#ifdef ORA#u PROC

#包括。

警告:猜测随之而来。

它抱怨的代码,文件
\u default\u types.h
第104行第31列,是:

#elif  defined(LLONG_MAX) && (LLONG_MAX > 0x7fffffff)
                              ^ column 31
LLONG\U MAX
中定义。关于Cygwin,定义如下:

#define LLONG_MAX __LONG_LONG_MAX__
指的是:

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

我没有使用Ora*C,但我猜它必须解析它的输入代码,这是C和SQL的组合,产生纯C输出。(正确吗?)如果Ora*C解析器不理解类型
long-long
,或
…LL
文本,它可能会产生您看到的那种错误

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

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

表明
code=ansi_c
是公认的选项。试试看


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

警告:推测如下。

它抱怨的代码,文件
\u default\u types.h
第104行第31列,是:

#elif  defined(LLONG_MAX) && (LLONG_MAX > 0x7fffffff)
                              ^ column 31
LLONG\U MAX
中定义。关于Cygwin,定义如下:

#define LLONG_MAX __LONG_LONG_MAX__
指的是:

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

我没有使用Ora*C,但我猜它必须解析它的输入代码,这是C和SQL的组合,产生纯C输出。(正确吗?)如果Ora*C解析器不理解类型
long-long
,或
…LL
文本,它可能会产生您看到的那种错误

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

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

表明
code=ansi_c
是公认的选项。试试看


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

尝试添加一对括号。我将在何处添加括号?在定义之前和下线:
#elif(defined(LLONG_MAX)&&(LLONG_MAX>0x7fffff))
您还可以尝试删除
LLONG_MAX>0x7fffff周围的括号。另外:检查前一行。可能是\r\n+反斜杠。谢谢,但它不起作用…此文件是gcc编译器库中的_default_types.h,因此我怀疑我必须对这些库文件进行任何更改…可能与Pro*C有关?我猜Pro*C确实有问题(Oracle+Microsoft+C:=坏组合)。顺便说一句:您可以查看头文件而不影响库。如果你知道自己在做什么,你甚至可以编辑它们。这是一个新的安装吗?尝试添加一对括号。在定义之前和下线处,我将在哪里添加括号:
#elif(已定义(LLONG_MAX)&&(LLONG_MAX>0x7fffffff))
您还可以尝试删除
LLONG_MAX>0x7FFFFF周围的括号。另外:检查前一行。可能是\r\n+反斜杠。谢谢,但它不起作用…此文件是gcc编译器库中的_default_types.h,因此我怀疑我必须对这些库文件进行任何更改…可能与Pro*C有关?我猜Pro*C确实有问题(Oracle+Microsoft+C:=坏组合)。顺便说一句:您可以查看头文件而不影响库。如果你知道自己在做什么,你甚至可以编辑它们。这是新安装的吗?OraC和ProC是一回事吗?OraC不是一回事。ProC是Oracle附带的一个预处理器,它从.pc文件中读取数据,并用一组执行实际工作的结构和函数调用替换嵌入式sql。输出文件通常是.c文件。然后,该.c文件由本机编译器编译,并与一组特定的Oracle库链接。错误消息中的PCC将其标识为Pro*c过程。OraC和ProC是同一件事吗?OraC不是一件事。ProC是Oracle附带的一个预处理器,它从.pc文件中读取数据,并用一组执行实际工作的结构和函数调用替换嵌入式sql。输出文件通常是.c文件。然后,该.c文件由本机编译器编译,并与一组特定的Oracle库链接