Comment faire en sorte que Pro*C supporte les directives #warning ?
-
08-06-2019 - |
Question
Lorsque j'essaie de précompiler un fichier *.pc contenant une directive #warning, je reçois l'erreur suivante :
PCC-S-02014, j'ai rencontré le symbole « avertissement » en attendant l'un des éléments suivants :(bla bla bla).
Puis-je d'une manière ou d'une autre convaincre Pro*C d'ignorer la chose s'il ne sait pas quoi en faire ?Je ne peux pas supprimer le #warning
directive telle qu'elle est utilisée dans un fichier d'en-tête que je ne peux pas modifier et que je dois inclure.
La solution
Selon le Guide du programmeur Pro*C/C++ (chapitre 5 « Sujets avancés »), Pro*C ignore silencieusement un certain nombre de directives du préprocesseur, notamment #error et #pragma, mais malheureusement pas #warning.Étant donné que vos directives d'avertissement sont incluses dans un fichier d'en-tête, vous pourrez peut-être utiliser la macro ORA_PROC :
#ifndef ORA_PROC
#include <irrelevant.h>
#endif
Cependant, pour une raison quelconque, des erreurs Pro*C apparaissent si vous essayez de masquer un #avertissement direct de cette façon.
Autres conseils
utiliser l'option parse=none
avec procédure
Vous ne pouvez pas.Pro*C ne connaît que #if et #include.Mon meilleur conseil serait de prétraiter le fichier dans le cadre de votre processus de construction pour supprimer les éléments que Pro*C n'aimera pas.Quelque chose comme
grep -v -E '^#(warning|pragma|define)' unchangeable.h >unchangeable.pc.h
Mon autre conseil serait d'éviter l'abomination qu'est Pro*C, mais je suppose que vous êtes coincé avec ça...
La réponse de Jons Ericson est correcte.
Il existe une deuxième circonstance dans laquelle vous devrez peut-être utiliser cette astuce.
Certaines versions de Pro*c ne peuvent pas gérer les fichiers qui n'ont pas d'extension de fichier.
La constante ORA_PROC est également une solution viable à ce problème.
/ bin / make -f /css/hwmig/pcprg/proc9i32.mk proflags = "sqlcheck = semantics userid = cssd / India09" pccsrc = bic i_sym = include = pc1 proc sqlcheck = semantics userid = cssd / India09 iname = bic inclue = .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++ :Version 9.2.0.6.0 - Production le mardi 2 décembre 14:05:38 2008
Copyright (c) 1982, 2002, Oracle Corporation.Tous droits réservés.
Valeurs des options par défaut du système extraites de :/oracle/Ora92/precomp/admin/pcscfg.cfg
Erreur de syntaxe à la ligne 135, colonne 2, fichier /usr/include/standards.h :Erreur à la ligne 135, colonne 2 dans le fichier /usr/include/standards.h
avertissement L'option -qdfp est requise pour traiter le code DFP dans les en-têtes.
.1 PCC-S-02014, a rencontré le symbole "avertissement" lorsque vous attendez l'un des suivants:
Une constante numérique, newline, définir, elif, else, endif, error, if, ifdef, ifndef, inclure, line, pragma, undef, une commande de préprocesseur immédiate, un jeton C, le symbole "newline", a été substitué à "AVERTISSE " continuer.
Erreur de syntaxe à la ligne 30, colonne 7, fichier bic.pc :Erreur à la ligne 30, colonne 7 dans le fichier bic.pc fichier fp;...... 1 PCC-S-02201, a rencontré le symbole "" lorsque vous attendez l'un des éléments suivants :
;, = ([Le symbole ";" a été substitué à "*" pour continuer.
Erreur à la ligne 0, colonne 0 dans le fichier bic.pc PCC-F-02102, erreur fatale tout en faisant le prétraitement C
Supprimez ci-dessous deux lignes de /usr/include/standards.h
avertissement L'option -qdfp est requise pour traiter le code DFP dans les en-têtes.
autre
Modifier /usr/include/standards.h
.
Supprimer la ligne #warning The -qdfp option is required to process DFP code in headers.
Le processus ne prend pas en charge le #warning
,juste #else
#if
etc.