Avertissement de fichier c .pc

J’ai un fichier RefTables.pc.

Lorsque j’exécute la commande make , j’obtiens l’avertissement suivant:

 RefTables.c:109: warning: type defaults to `int' in declaration of `sqlcxt' RefTables.c:111: warning: type defaults to `int' in declaration of `sqlcx2t' RefTables.c:113: warning: type defaults to `int' in declaration of `sqlbuft' RefTables.c:114: warning: type defaults to `int' in declaration of `sqlgs2t' RefTables.c:115: warning: type defaults to `int' in declaration of `sqlorat' 

Comment puis-je l’enlever?

J’utilise le compilateur linux & gcc.

Vous pouvez supprimer l’avertissement en spécifiant le type des 5 déclarations incriminées. En fait, ils doivent être déclarés sans aucun type, qui par défaut est int en C (mais génère un avertissement).

Edit: J’ai trouvé cette déclaration sur Google.

 extern sqlcxt (/*_ void **, unsigned int *, struct sqlexd *, struct sqlcxp * _*/); 

La fonction n’a pas de type de retour. Il devrait en avoir un. Écris-le comme suit.

 extern int sqlcxt (/*_ void **, unsigned int *, struct sqlexd *, struct sqlcxp * _*/); 

Ou vous pouvez indiquer manuellement dans la ligne de commande du compilateur pour ignorer ces avertissements. Ils ne seront plus affichés.

Cela fait longtemps que je n’utilise pas Pro * C, mais je pense que vous pouvez append une option de ligne de commande à la ligne de commande proc.

 code=ANSI_C 

qui donnera des prototypes pour les fonctions nommées.

À l’avenir, fournissez un extrait de code avec les avertissements afin que nous puissions travailler dans un contexte. Sinon, nous ne pouvons que deviner quel est le véritable problème.

Je suppose que sqlcxt, sqlcx2t, etc. sont des fonctions. Sans voir le code source, il semble que vous n’ayez pas de déclaration pour ces fonctions avant de les utiliser.

Voici un court exemple de ce que je veux dire:

 int main(void) { foo(); return 0; } void foo(void) { // do something interesting } 

Lorsque le compilateur voit l’appel à foo in main , il n’a pas de déclaration dans la scope. Il suppose donc que foo renvoie int, et non nul, et renvoie un avertissement similaire à ce que vous avez obtenu ci-dessus.

Si vos fonctions sont définies dans le même fichier que leur nom, ce problème peut être résolu de deux manières. Ma méthode préférée consiste à définir la fonction avant son utilisation:

 void foo(void) { // do something interesting } int main(void) { foo(); return 0; } 

Une autre façon est d’avoir une déclaration de la fonction dans la scope avant de l’appeler:

 void foo(void); int main(void) { foo(); return 0; } void foo(void) { // do something interesting } 

On dirait que ces fonctions font partie d’une API de firebase database; Si tel est le cas, il devrait exister un fichier d’en-tête contenant les déclarations de ces fonctions. Cet en-tête devrait être inclus dans votre fichier source:

 /** foo.c */ #include "foo.h" void foo(void) { // do something interesting } /** end foo.c */ /** foo.h */ #ifndef FOO_H #define FOO_H void foo(void); #endif /** end foo.h */ /** main.c */ #include "foo.h" int main(void) { foo(); return 0; } /** end main.c */ 

J’espère que cela pourra aider.