¿Cómo hacer que Pro*C haga frente a las directivas de #advertencia?
-
08-06-2019 - |
Pregunta
Cuando intento precompilar un archivo *.pc que contiene una directiva #warning, recibo el siguiente error:
PCC-S-02014, Encontré el símbolo "advertencia" cuando se esperaba uno de los siguientes:(bla bla bla).
¿Puedo de alguna manera convencer a Pro*C de que lo ignore si no sabe qué hacer con él?no puedo quitar el #warning
directiva tal como se usa en un archivo de encabezado que no puedo cambiar y debo incluir.
Solución
De acuerdo con la Guía del programador Pro*C/C++ (capítulo 5 "Temas avanzados"), Pro*C ignora silenciosamente una serie de directivas del preprocesador, incluidas #error y #pragma, pero lamentablemente no #advertencia.Dado que sus directivas de advertencia están incluidas en un archivo de encabezado, es posible que pueda utilizar la macro ORA_PROC:
#ifndef ORA_PROC
#include <irrelevant.h>
#endif
Sin embargo, por alguna razón, Pro*C genera errores si intenta ocultar una #advertencia directa de esa manera.
Otros consejos
opción de uso parse=none
con proceso
No puedes.Pro*C sólo sabe #if e #include.Mi mejor consejo sería preprocesar el archivo como parte de su proceso de compilación para eliminar cosas que a Pro*C no le gusten.Algo como
grep -v -E '^#(warning|pragma|define)' unchangeable.h >unchangeable.pc.h
Mi otro consejo sería evitar la abominación que es Pro*C, pero supongo que te quedarás atrapado...
La respuesta de Jons Ericson es correcta.
Existe una segunda circunstancia en la que es posible que necesites utilizar ese truco.
Algunas versiones de Pro*c no pueden incluir archivos que no tienen una extensión de archivo.
La constante ORA_PROC también es una solución viable para ese problema.
/bin/make -f /css/hwmig/pcprg/proc9i32.mk procflags = "sqlcheck = semantics usiD = cssd/india09" pccsrc = bic i_sym = include = pc1 proc sqlcheck = semantics userid = cssd/india09 iname = bic incluido = = = = = = .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++:Versión 9.2.0.6.0 - Producción el martes 2 de diciembre 14:05:38 2008
Copyright (c) 1982, 2002, Oracle Corporation.Reservados todos los derechos.
Valores de opciones predeterminados del sistema tomados de:/oracle/Ora92/precomp/admin/pcscfg.cfg
Error de sintaxis en la línea 135, columna 2, archivo /usr/include/standards.h:Error en la línea 135, columna 2 en el archivo /usr/include/standards.h
advertencia La opción -qdfp es necesaria para procesar el código de DFP en los encabezados.
.1 PCC-S-02014, encontró el símbolo "advertencia" al esperar uno de los siguientes:
una constante numérica, nueva línea, definir, elif, else, endif, error, si, si ifdef, ifndef, incluye, line, pragma, undef, un comando de preprocesador inmediato, un token C, el símbolo "Newline", fue sustituido por "advertencia de advertencia " continuar.
Error de sintaxis en la línea 30, columna 7, archivo bic.pc:Error en la línea 30, columna 7 en el archivo bic.pc archivo fp;...... 1 PCC-S-02201, encontró el símbolo "" cuando se espera uno de los siguientes:
;, = ([El símbolo ";" fue sustituido por "*" para continuar.
Error en la línea 0, columna 0 en el archivo bic.pc pcc-f-02102, error fatal al hacer el preprocesamiento de C
Elimine las dos líneas siguientes de /usr/include/standards.h
advertencia La opción -qdfp es necesaria para procesar el código de DFP en los encabezados.
demás
Modificar /usr/include/standards.h
.
eliminar la linea #warning The -qdfp option is required to process DFP code in headers.
El proceso no soporta el #warning
,justo #else
#if
etc.