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

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

PCC-S-02014, Обнаружен символ «предупреждение» при ожидании одного из следующих событий: (бла бла бла).

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

Ответов (7)

Решение

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

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

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

/ bin / make -f /css/hwmig/pcprg/proc9i32.mk PROCFLAGS = "sqlcheck = SEMANTICS userid = cssd / india09" PCCSRC = bic I_SYM = include = pc1 proc sqlcheck = SEMANTICS userid = cssd / india09 = include iname . include = / oracle / Ora92 / precomp / public include = / oracle / Ora92 / rdbms / public include = / oracle / Ora92 / rdbms / demo include = / oracle / Ora92 / plsql / public include = / oracle / Ora92 / network / public

Pro * C/C++: выпуск 9.2.0.6.0 - производство во вторник, 2 декабря, 14:05:38 2008 г.

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

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

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

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

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

числовая константа, новая строка, определение, elif, else, endif, error, if, ifdef, ifndef, include, line, pragma, undef, непосредственная команда препроцессора, токен C, символ «новая строка» был заменен на «предупреждение» " продолжить.

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

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

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

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

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

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

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

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

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

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

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

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

еще

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

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