J'ai deux C fichiers.
file1.c
int main()
{
func();
return 0;
}
file2.c
static void func(void)
{
puts("func called");
}
Mais, si je compile le code ci-dessus avec la commande cc file2.c file1.c
, J'ai le dessous,
undefined reference to `func'
collect2: error: ld returned 1 exit status
Mais, si je supprime le mot clé static
à l'intérieur file2.c et compile le code ci-dessus avec la commande cc file2.c file1.c
, Il est exécuté avec succès.
Donc, j'ai une question, Quelle est la différence entre la fonction void et la fonction void statique en C?
Quelle est la différence entre la fonction void et la fonction void statique en C?
La vraie question devrait être quelle est la différence entre static
et non-static
une fonction? (le type de retour void
n'est pas pertinent, il peut être int
ou toute autre chose).
Le mot clé static
est quelque peu sur-utilisé. Lorsqu'il s'applique à une fonction, cela signifie que la fonction a liaison interne , c'est-à-dire que sa portée est limitée à nité de traduction (simplement en tant que fichier source).
Par défaut, la fonction n'est pas statique et a une liaison externe. La fonction peut être utilisée par un fichier source différent.
Dans votre cas, l'erreur se manifeste car static func
ne peut pas être utilisé dans un autre fichier source.
Quand faut-il utiliser les fonctions static
?
Les fonctions static
sont normalement utilisées pour éviter les conflits de noms dans les projets plus importants. Si vous inspectez la source du noyau Linux, exemple dans drivers/net
vous verriez beaucoup static void
fonctionne là-dedans. Les pilotes sont développés par différents fournisseurs et l'utilisation des fonctions static
garantit qu'ils peuvent nommer les fonctions comme ils le souhaitent sans se soucier des conflits de noms avec d'autres développeurs de pilotes non liés.