web-dev-qa-db-fra.com

fonction déclarée statique mais jamais définie

J'ai un fichier d'en-tête supposons abc.h, où j'ai la déclaration de fonction comme:

static int function1();

J'ai inclus ce fichier d'en-tête dans abc.c et j'ai défini la fonction et l'ai utilisé.

static int function1()
{
 < function definition>
}

Après la compilation, je reçois un avertissement:

warning: function1 declared static but never defined

Comment puis-je supprimer l'avertissement, sans supprimer l'électricité statique. Merci.

35
pankanaj

Une fonction statique peut être déclarée dans un fichier d'en-tête, mais cela entraînerait pour chaque fichier source qui incluait le fichier d'en-tête sa propre copie privée de la fonction, ce qui n'est probablement pas ce qui était prévu.

Êtes-vous sûr que vous n'avez pas inclus le fichier abc.h dans d'autres fichiers .c?

Parce que déclarer une fonction comme statique, nécessite que la fonction soit définie dans tous les fichiers .c dans lesquels elle est incluse.

35
hazzelnuttie

Bonne pratique: Déclarez les fonctions statiques dans le fichier source dans lequel elles sont définies (veuillez également fournir le prototype), car c'est le seul fichier dans lequel elles sont visibles.

De cette façon, la fonction n'est visible que dans ce fichier, de tels problèmes de visibilité peuvent réduire les éventuels conflits de code! Il suffit donc de fournir le prototype et la définition de la fonction statique dans le fichier .c. N'incluez pas la fonction statique dans le fichier d'en-tête; le fichier .h est destiné à une consommation externe.

Dupliquer: Fonctions statiques en C

6
Ehsan