Ora * C PCC-S-02201, Обнаружен символ "L" при ожидании одного из следующих действий: - PullRequest
1 голос
/ 12 декабря 2011

Наличие этой проблемы при запуске Pro * C в Windows с Cygwin

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 ]

1 голос
/ 13 декабря 2011

Рассмотрите возможность использования

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

чтобы подавить то, что включает в себя зло, как возможный обходной путь.

Он эффективно скрывает включение от препроцессора Pro * c, оставляя его для компилятора.

Вы также можете провести исследование металинк .

0 голосов
/ 18 декабря 2011

Предупреждение: предположение следует.

Код, на который он жалуется, строка 104, столбец 31 в файле _default_types.h:

#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. В C до C99 (если это не поддерживается как расширение), 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 является опознанным вариантом. Попробуйте это.

Или ошибка исходит от компилятора C, который вызывается Ora * C? Какой компилятор C вы используете? Если это не gcc, можете ли вы настроить его на использование gcc?

...