Как заставить Pro * C справляться с директивами #warning?

StackOverflow https://stackoverflow.com/questions/14698

  •  08-06-2019
  •  | 
  •  

Вопрос

Когда я пытаюсь предварительно скомпилировать файл * .pc, содержащий директиву #warning, я получаю следующую ошибку:

PCC-S-02014, Столкнулся с символом "предупреждение" при ожидании одного из следующих действий:(bla bla bla).

Могу ли я каким-то образом убедить Pro * C игнорировать эту вещь, если она не знает, что с ней делать?Я не могу удалить #warning директива, поскольку она используется в заголовочном файле, который я не могу изменить и который должен включать.

Это было полезно?

Решение

В соответствии с Руководство программиста Pro*C/C ++ (глава 5 "Расширенные разделы"), Pro * C молча игнорирует ряд директив препроцессора, включая #error и #pragma, но, к сожалению, не #warning.Поскольку ваши директивы warning включены в заголовочный файл, вы могли бы использовать макрос ORA_PROC:

#ifndef  ORA_PROC
#include <irrelevant.h>
#endif

Однако по какой-то причине Pro * C выдает ошибку, если вы пытаетесь скрыть прямое предупреждение # таким образом.

Другие советы

использовать опцию parse=none с помощью proc

Ты не можешь.Pro * C знает только #if и #include.Моим лучшим советом было бы предварительно обработать файл как часть процесса сборки, чтобы удалить то, что не понравится Pro * C.Что -то вроде

grep -v -E '^#(warning|pragma|define)' unchangeable.h >unchangeable.pc.h

Моим другим советом было бы избегать мерзости, которая является Pro * C, но я предполагаю, что вы застряли на этом...

Ответ Джона Эриксона правильный.

Есть второе обстоятельство, при котором вам, возможно, придется использовать этот трюк.

Некоторые версии Pro * c не могут работать с включаемыми файлами, у которых нет расширения файла.

Константа ORA_PROC также является одним из приемлемых решений этой проблемы.

/bin/make -f /css/hwmig/pcprg/proc9i32.mk PROCFLAGS="sqlcheck=СЕМАНТИКА userid=cssd/india09" PCCSRC=bic I_SYM=включить= pc1 proc sqlcheck=СЕМАНТИЧЕСКИЙ идентификатор пользователя=cssd/india09 iname=bic include=.включить=/oracle/Ora92/precomp/public включить=/ oracle/Ora92/rdbms/public включить=/ oracle/Ora92/rdbms/demo включить=/oracle/Ora92/plsql/public включить=/ oracle/Ora92/network/public

Профессиональный *C/C++:Релиз 9.2.0.6.0 - Выпущен во вторник, 2 декабря, 14:05:38 2008

Авторское право (c) 1982, 2002, корпорация Oracle.Все права защищены.

Значения параметров системы по умолчанию взяты из:/oracle/Ora92/precomp/admin/pcscfg.cfg

Синтаксическая ошибка в строке 135, столбец 2, файл /usr/include/standards.h:Ошибка в строке 135, столбец 2 в файле /usr/include/standards.h

предупреждение Параметр -qdfp необходим для обработки кода DFP в заголовках.

.1 PCC-S-02014, столкнулся с символом "предупреждение" при ожидании одного из следующих действий g:

числовая константа, перевод строки, определение, elif, else, endif, ошибка, if, ifdef, ifndef, включение, строка, pragma, undef, немедленная команда препроцессора, токен C, Символ "новая строка" был заменен на "предупреждение" о продолжении.

Синтаксическая ошибка в строке 30, столбце 7, файл bic.pc:Ошибка в строке 30, столбце 7 в файле bic.pc ФАЙЛ фп;......1 PCC-S-02201, Наткнулся на символ "" при ожидании одного из следующих:

;, = ( [ Символ ";" был заменен на "*", чтобы продолжить.

Ошибка в строке 0, столбце 0 в файле bic.pc PCC-F-02102, Неустранимая ошибка при выполнении предварительной обработки C

Удалите нижеприведенные две строки из /usr/include/standards.h

предупреждение Параметр -qdfp необходим для обработки кода DFP в заголовках.

ещё

Изменять /usr/include/standards.h.
Удалить строку #warning The -qdfp option is required to process DFP code in headers. Процедура не поддерживает #warning,просто #else #if и т.д.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top