Comment résoudre statique de la déclaration suivante de non-statique de la déclaration dans GCC code C?
Je suis en train de compiler le même fichier C sur deux machines différentes avec différentes versions de la cc.
version de gcc 3.2.3 dit warning: 'foo' was declared implicitly 'extern' and later 'static'
version de gcc 4.1.2 dit error: static declaration of 'foo' follows non-static declaration
Les deux ont le même CFLAGS. Je voudrais faire gcc 4.1.2 se comporter comme gcc 3.2.3, c'est trouver une option qui serait à son tour cette erreur dans un simple avertissement.
- Quelques commentaires intéressants sur le code source d'erreur point: github.com/gcc-mirror/gcc/blob/gcc-8_1_0-release/gcc/c/...
Vous devez vous connecter pour publier un commentaire.
De ce que le message d'erreur dont il se plaint, il semble que vous devriez plutôt essayer de corriger le code source. Le compilateur se plaint de différence dans la déclaration, semblable par exemple
et ce n'est pas valide le code en C, donc le compilateur se plaint.
Peut-être que votre problème est qu'il n'existe pas de prototype disponible lorsque la fonction est utilisée la première fois et le compilateur crée implicitement une qui ne va pas être statique. Si donc la solution est d'ajouter un prototype quelque part avant la première utilisation, il est.
-Werror-implicit-function-declaration
(gcc 3.4, de toute façon; ce n'est pas sûr versions ultérieures).Alors que gcc 3.2.3 était plus tolérant de la question, gcc 4.1.2 mettre en lumière une potentiellement grave problème pour le lien de votre programme plus tard. Plutôt que de chercher à supprimer l'erreur, vous devez en faire la déclaration de l'avant match de la déclaration de la fonction.
Si vous aviez l'intention pour que la fonction soit disponible dans le monde entier (selon la déclaration anticipée) alors ne le faites pas par la suite, déclarer comme statique. Même si c'est mis en retrait pour être configuré localement puis faire la déclaration anticipée statique de match.
Essayer
-Wno-traditional
.Mais mieux, ajouter les déclarations de vos fonctions statiques:
J'ai eu ce problème dans le cas où le
static
fonction a été appelée avant il a été déclaré. Le déplacement de la déclaration de la fonction de n'importe où au-dessus de l'appel a résolu mon problème.Vous avez déclaré une fonction non statique dans un fichier et que vous avez mis en œuvre comme statique dans un autre fichier, ou quelque part d'ions sur le même fichier peut provoquer ce problème.
Par exemple, le code suivant va produire cette erreur.
Si vous retirez la statique de la mise en œuvre, l'erreur va aller loin comme ci-dessous.
Cette erreur peut être causée par une unclosed série de crochets.
Pas si facile à repérer, même en ce 4 exemple de ligne.
Cette erreur, dans un 150 de la ligne principale fonction, qui a provoqué l'incroyable erreur: "statique de la déclaration de ‘savePair’ suit de non-statique de la déclaration". Il n'y a rien de mal avec ma définition de la fonction savePair, c'était que unclosed support.
J'ai eu un problème similaire , le nom de La fonction, j'ai été appariés en utilisant l'un de l'intégré les fonctions déclarées dans l'un des fichiers d'en-tête que j'ai inclus dans le programme.En lisant le message d'erreur compilateur va vous dire exactement en-tête de fichier et le nom de la fonction.Changer le nom de la fonction à résoudre ce problème pour moi