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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top