Je comprends ce que l'électricité statique fait, mais pas pourquoi nous l'utilisons. Est-ce juste pour garder la couche d'abstraction?Pourquoi déclarer une variable ou une fonction statique dans C?
Répondre
Il y a quelques raisons d'utiliser static
en C.
Lorsqu'il est utilisé avec les fonctions, oui l'intention est de créer l'abstraction. Le terme original pour la portée d'un fichier de code source C était "unité de traduction". Les fonctions statiques ne peuvent être atteintes qu'à partir de la même unité de traduction. Ces fonctions statiques sont similaires aux méthodes privées en C++, interprétées libéralement (dans cette analogie, une unité de traduction définit une classe).
Les données statiques au niveau global ne sont pas non plus accessibles depuis l'extérieur de l'unité de traduction, et elles sont également utilisées pour créer une abstraction. De plus, toutes les données statiques sont initialisées à zéro, donc static
peut être utilisé pour contrôler l'initialisation.
La variable statique au niveau de la variable locale ("automatique") est utilisée pour extraire l'implémentation de la fonction qui maintient l'état entre les appels, mais évite d'utiliser une variable à la portée de l'unité de traduction. Encore une fois, les variables sont initialisées à zéro en raison de la qualification statique.
Le mot-clé static a plusieurs utilisations; En dehors d'une fonction, il limite simplement la visibilité d'une fonction ou d'une variable à l'unité de compilation (fichier .c) dans laquelle la fonction ou la variable intervient. Ainsi, la fonction ou la variable ne devient pas globale. C'est une bonne chose, ça promeut une sorte de "besoin de savoir" (ne pas exposer les choses qui n'ont pas besoin d'être exposées). Les variables statiques de ce type sont initialisées à zéro, mais bien sûr, les variables globales sont également initialisées à zéro, de sorte que le mot-clé statique n'est pas responsable de l'initialisation zéro en soi.
Les variables peuvent également être déclarées statiques dans une fonction. Cette caractéristique signifie que la variable n'est pas automatique, c'est-à-dire allouée et libérée sur la pile à chaque invocation de la fonction. Au lieu de cela, la variable est allouée dans la zone de données statiques, elle est initialisée à zéro et persiste pendant toute la durée du programme. Si la fonction le modifie pendant une invocation, la nouvelle valeur modifiée sera disponible lors de l'invocation suivante. Cela semble être une bonne chose, mais il y a de bonnes raisons pour lesquelles "auto" est la valeur par défaut, et les variables "statiques" dans les fonctions doivent être utilisées avec parcimonie. En bref, les variables automatiques sont plus efficaces en termes de mémoire et sont essentielles si vous souhaitez que votre fonction soit sûre pour les threads.
static
est utilisé comme storage class specifier et linkage specifier. En tant que spécificateur de liaison, il restreint la portée d'une variable ou d'une fonction globale à une seule unité de compilation. Cela permet, par exemple, à une unité de compilation d'avoir des variables et des fonctions avec les mêmes noms d'identifiants que les autres unités de compilation mais sans provoquer de conflit, puisque ces identifiants sont "cachés" à l'éditeur de liens. Ceci est utile si vous créez une bibliothèque par exemple et que vous avez besoin de fonctions internes 'helper' qui ne doivent pas provoquer de conflit avec le code utilisateur.
En tant que spécificateur de classe de stockage appliqué à une variable locale, il a des sémantiques entièrement différentes, mais votre question semble impliquer que vous faites référence à une liaison statique.
fonctions statiques en C
En C, les fonctions sont globales par défaut. Le mot-clé "static" avant un nom de fonction le rend statique. Par exemple, la fonction ci-dessous fun() est statique. Contrairement aux fonctions globales de C, l'accès aux fonctions statiques est limité au fichier où elles sont déclarées.Par conséquent, lorsque nous voulons restreindre l'accès aux fonctions, nous les rendons statiques. Une autre raison pour rendre les fonctions statiques peut être la réutilisation du même nom de fonction dans d'autres fichiers.
Par exemple, si nous stockons programme suivant dans un fichier fichier1.c
/* Inside file1.c */
static void fun1(void)
{
puts("fun1 called");
}
et stockons programme suivant dans un autre fichier fichier2.c
/* Iinside file2.c */
int main(void)
{
fun1();
getchar();
return 0;
}
Maintenant, si nous compilons le code ci-dessus avec la commande "gcc file2.c file1.c
", nous obtenons l'erreur "référence indéfinie à fun1’” . This is because fun1() is declared
static` dans le fichier file1.c et ne peut pas être utilisée dans file2.c. Voir aussi le explanation here, d'où viennent les codes.
- 1. Déclarer une variable dans DB2
- 2. PHP - pourquoi je ne pouvais pas déclarer statique const variable?
- 3. C++ appelant une fonction statique d'une autre fonction statique
- 4. Une variable statique essayant d'accéder à une autre variable statique
- 5. Déclarer une fonction SML
- 6. pourquoi une variable dans une méthode statique doit être déclarée comme finale dans Java
- 7. comment déclarer une variable dans PostgreSQL
- 8. Pourquoi une variable const est-elle disponible dans une méthode statique?
- 9. Déclarer un tableau en utilisant une variable en C++
- 10. C++ variable statique
- 11. JasperReports: Déclarer une variable comme HashMap
- 12. Déclarer une classe/struct
- 13. Déclarer une fonction statique et postérieure non statique: est-elle standard?
- 14. Variable globale dans une méthode statique
- 15. En utilisant une variable pour représenter une fonction dans C
- 16. Comment déclarer un pointeur vers une variable en tant que paramètre d'une fonction en C++?
- 17. Pourquoi ma classe interne voit-elle une variable NON statique?
- 18. problème variable C statique
- 19. JavaScript: déclarer et définir une fonction séparément?
- 20. C#: exécute une fonction stockée dans une variable de chaîne
- 21. Comment déclarer une variable globale en JavaScript?
- 22. comment déclarer une variable en javascript
- 23. Comment partager une variable statique entre des fichiers source C++?
- 24. Pourquoi déclarer une méthode dans une catégorie sans l'implémenter?
- 25. Pourquoi ne puis-je pas déclarer une variable d'instance en tant que tableau d'objets dans PHP?
- 26. Comment déclarer une classe statique globale en Java?
- 27. est-il possible d'avoir une variable statique dans une fonction rebol?
- 28. affecter un type à une variable, utiliser une variable avec une classe statique générique
- 29. Dois-je déclarer une variable privée pour une propriété IBOutlet *?
- 30. comment déclarer statique NSString?
Duplication de http://stackoverflow.com/questions/572547/what-does-static-mean-in-a-c-program –