-
PROCFLAGS=CODE=ANSI_C
Bonjour,
Base Oracle 8.1.7
Malgre l'ajout dans mon Makefile de l'option PROCFLAGS=CODE=ANSI_C.
Je me prends plein de warnings du a du code genere par Pro*C :( .
Ex (mais y'en a plein d'autres):
static struct sqltdss sqltds =
{
1,
0,
};
Cette superbe initialisation avec une jolie virgule avant la parenthese qui ferme.
Pas vraiment ANSI C ce code 8O.
A priori ce code est genere systematiquement quelque soit le fichier source precompile ...
Avez vous deja remarque ces warnings et trouve un moyen de faire generer du vrai code ansi c au precompilateur Pro*C?
Et sinon si cela ne se produit pas sur votre version de precompilateur, merci de m'indiquer quelle est votre version ?
Merci,
jrman
-
Salut,
Pouvez-vous spécifier quels types de warnings sont générés.
Quel est réellement le problème en fait, supprimer les warnings ou avoir du vrai code C ANSI ?
Sur mes appli, le code C généré a les mêmes 'erreurs' que vous (la virgule en trop dans les structures), mais cela ne gêne pas plus que cela mon compilo. Aucun warning de générés.
Peut être une option du compilo C pour le rendre moins permisifs ?
Pour info, je compile avec Visual Age (le compilo d'IBM pour AIX), mais avec gcc j'ai essayé une fois, et aucun problème non plus. Mon pro*C est une version 8.1.7.
Phig
-
Bonjour,
Effectivement ces warnings sont non bloquants. Le link fonctionne ! Le process je ne sais pas encore.
Voici la ligne de pre compilation proc:
proc CODE=ANSI_C SQLCHECK=SEMANTICS USERID=user/pass iname=toto oname=toto.c
et la ligne de compilation:
gcc -ansi -DOS_SYSV=4 -DOS_SOLARIS -DOS_SOLARIS_2 -fPIC -g -O1 -W -Wall -Wpointer-arith -Wshadow -Wcast-qual -Wcast-align -Winline -Wmissing-prototypes -Wstrict-prototypes -Wimplicit -c toto.c
Et les warnings generes:
toto.c:43: warning: missing initializer
toto.c:43: warning: (near initialization for `sqladt.adttvn')
toto.c:57: warning: missing initializer
toto.c:57: warning: (near initialization for `sqltds.tdsval')
toto.c:106: warning: missing initializer
toto.c:106: warning: (near initialization for `sqlstm.iters')
toto.c: In function `funct1':
toto.c:250: warning: declaration of `sqlstm' shadows a global declaration
toto.c:106: warning: shadowed declaration is here
toto.c: At top level:
toto.c:106: warning: `sqlstm' defined but not used
Aucune suppression de flags de compilation gcc ne m'est permise et le probleme est que j'ai des centaines de fichier a compiler, et donc le code genere non ansi va engendrer des milliers de warning.
Meme si ils ne semblent pas bloquants a priori ils devront disparaitre dans nos phases de compilation d'une facon ou d'une autre.
Hormis une autre version de pre compilateur qui genererait du vrai code ansi je ne vois pas comment faire? Probleme une telle version existe t elle ? Car le flag destine au pre compilateur est quasiment inefficace (seulement 3 warning de moins).
Merci,
jrman
-
je n'ai qu'un proC en version 8.1.7 donc je peux pas dire si une version supérieure corrigerait les problèmes. La seule solution, mais elle t'est interdite, serait de supprimer les flag W... pour ne pas générer les warnings correspondant :cry:
J'ai cherché sur pas mal de forum et j'ai rien trouvé concernant ton problème ...
Il faudrait éventuellement ouvrir un TAR sur metalink, ils pourront mieux te renseigner
Phig
-
Oui je crois bien que je vais devoir faire ca.
C'est tout de meme hallucinant de constater des problemes de generation de code aussi basiques, typiquement le coup de la virgule, c'est celle de fin de boucle qui n'a pas ete geree, franchement je trouve ca annormal.
Ce qui me rassure c'est que a priori un patch pour toutes les causes de warning peut etre envisage sur le Pre compilateur. Je verrais ce qu'Oracle propose on sait jamais, je crois que cela se fait.
Rien de bloquant mais quand meme ...
Sinon je me dis qu'un parse and replace pour corriger ces warnings peut etre envisage, a voir en dernier recours ...
Merci,
jrman
-
sans vouloir abuser de ton temps, peux-tu me dire pour quelles raisons utilisez-vous les flags W... pour le compilateur C.
C'est vrai que je ne me suis jamais penché sur l'optimisation de mes paramètres de compilation, alors pour une fois qu'un post aborde plus ou moins ce sujet, je me renseigne , je pourrai peut être tirer quelques infos intéressantes :wink:
Phig
-
Cette liste de warning a ete decidee d'un commun accord entre plusieurs groupes de travail.
L'objectif etait simple, l'amelioration de la qualite du code.
Le flag ansi laisse passer beaucoup de chose. Avec cette liste beaucoup de probleme sont remontes dans tout le code et a permis l'elimination de certaines facilites d'ecriture confortable permises par C, mais neanmoins dangereuse sur des systemes fortement sollicites.
Tous ces flags sont dans la doc de gcc et c'est a partir de cette doc qu'elle avait ete constituee.
Ca remonte a plusieurs annees, ainsi aujourd'hui nous avons un nouveau type de compilation avec Oracle et cela ne sera pas une raison suffisante pour revoir cette liste.
Voila j'espere avoir repondu.
a+
jrman
-
merci beaucoup pour l'info.
il faudrait que je me penche aussi sur mes options de compilation, car au niveau facilité d'écriture, j'abuse peut être un peu :wink:
en tout cas, tout à fait d'accord, il ne faudrait surtout pas revenir en arrière à cause du ProC
Bonne continuation
Phig