2008-08-18 28 views
3

Lorsque je tente de précompiler un fichier * .pc qui contient une directive #WARNING je reçois l'erreur suivante:Comment faire pour que Pro * C fasse face aux directives #warning?

PCC-S-02014, Encountered the symbol "warning" when expecting one of the following: (bla bla bla).

Puis-je convaincre en quelque sorte Pro * C d'ignorer la chose si elle ne sait pas quoi faire avec? Je ne peux pas supprimer la directive #warning car elle est utilisée dans un fichier d'en-tête que je ne peux pas modifier et que je dois inclure.

Répondre

4

Selon le Pro * C/Guide du programmeur C++ (chapitre 5 "Sujets avancés"), Pro * C ignore silencieusement un certain nombre de directives de préprocesseur, y compris #error et #pragma, mais malheureusement pas #warning. Étant donné que vos directives d'avertissement sont inclus dans un fichier d'en-tête, vous pourriez être en mesure d'utiliser la macro ORA_PROC:

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

Pour une raison quelconque, Pro * erreurs C si vous essayez de cacher une #WARNING droite de cette façon, mais .

0

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 choses que Pro * C ne voudra pas. Quelque chose comme

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

Mon autre conseil serait d'éviter l'abomination qui est Pro * C, mais je devine que vous êtes coincé avec elle ...

0

La réponse de Jons Ericsons est correcte.

Il y a un deuxième cas où vous devrez peut-être utiliser cette astuce.

Certaines versions de Pro * C ne peut pas traiter d'inclure des fichiers qui ne sont pas une extension de fichier.

La constante de ORA_PROC est une solution pratique à ce problème aussi bien.

0

/bin/make -f /css/hwmig/pcprg/proc9i32.mk PROCFLAGS = "sqlcheck = Sémantique userid = CSSD/india09" PCCSRC = bic I_SYM = include = PC1 proc sqlcheck = Sémantique userid = CSSD/india09 iname = bic include =. include =/oracle/Ora92/precomp/public include =/oracle/Ora92/rdbms/public include =/oracle/Ora92/rdbms/démo include =/oracle/Ora92/plsql/public include =/oracle/Ora92/réseau/public

Pro * C/C++: Release 9.2.0.6.0 - production sur Tue Dec 2 14:05:38 2008

Copyright (c) 1982, 2002, Oracle Corporation. Tous les droits sont réservés.

valeurs d'option par défaut du système extrait de: /oracle/Ora92/precomp/admin/pcscfg.cfg

Erreur de syntaxe à la ligne 135, colonne 2, déposer /usr/include/standards.h: erreur à la ligne 135, colonne 2 dans le fichier /usr/include/standards.h

avertissement L'option -qdfp est nécessaire pour traiter le code DFP en-têtes.

.1 PCC-S-02014, Rencontrés le symbole "avertissement" en attendant un des followin g:

une constante numérique, nouvelle ligne, définir, Elif, sinon, endif, erreur , si, ifdef, ifndef, include, line, pragma, undef, une commande de préprocesseur immédiate, un token C, Le symbole "newline" a été remplacé par "warning" pour continuer.

Erreur de syntaxe à la ligne 30, colonne 7, fichier bic.pc: erreur à la ligne 30, colonne 7 dans le fichier bic.pc FILE fp; ...... 1 PCC-S-02201, le symbole Rencontrés "" si vous attendez une des opérations suivantes:

; , = ([ Le symbole ";" a été remplacé par "*" pour continuer

erreur à la ligne 0, colonne 0 dans le fichier bic.pc PCC-F-02102, erreur irrécupérable tout en faisant pré-traitement C

.
-1

Supprimer sous deux lignes de /usr/include/standards.h

avertissement L'option -qdfp est nécessaire pour traiter le code des en-têtes DFP.

autre

1

option avec utilisation parse=none proc

-2

Modifier /usr/include/standards.h.
Supprimer la ligne #warning The -qdfp option is required to process DFP code in headers. Le proc ne supporte pas le #warning, juste #else#if etc.

+1

C'est * ABSOLUMENT LA RÉPONSE POSITIVE MAL *. Vous ne devez JAMAIS *, en aucun cas, modifier les en-têtes du système pour corriger un bogue de l'application. –