在使用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
谢谢!
答案 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吗?