Как заставить Pro * C справляться с директивами #warning?
-
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
и т.д.