Qu'est-ce que l'utilisation de la variable locale Statique lorsque nous pouvons obtenir une variable globale au même coût?
En C ,qu'est-ce que l'utilisation de la mémoire statique de la classe lorsqu'une variable externe peut servir de son but au même coût ie. les deux occupent un espace de stockage dans le segment de données de l'exécutable.
J'ai bien mieux portée avec une variable externe.Si je veux la portée de la variable externe pour être précis fichier je n'ai pas déclarer cette variable ailleurs.je vois beaucoup de flexibilité avec une variable globale que variable locale statique
Et nous pouvons nous référer à la variable statique locale en dehors de la fonction si nous avons l'adresse de la variable.Mémoire pour la variable statique locale sera dans le segment de Données pas dans le cadre de la pile de la fonction.Si unique fonction est statique de la classe de stockage apporter à la table.
Je veux juste savoir si statique a tout subtil but que je ne suis pas au courant.
double possible de Qu'est "statique" dans un programme en C?
koushik :j'ai bien mieux portée avec une variable externe.Si je veux le champ d'application de fichier spécifique, je n'ai pas déclarer cette variable ailleurs.je vois beaucoup de flexibilité avec une variable globale que variable locale statique.
Plus gros ne veut pas dire mieux, parfois, les limites sont une bonne chose.
Il n'existe pas de variables globales dans les C. de Ce que vous faites allusion, est une variable déclarée à la portée du fichier (qui se trouve implicitement ont statique de la durée de stockage, par la voie).
OriginalL'auteur Adi | 2013-04-04
Vous devez vous connecter pour publier un commentaire.
Vous écrire qu'une variable globale est une “meilleure” champ d'application. Ceci est incorrect. Il a une plus grande portée. La taille n'est pas mieux.
Plus grand peut être nécessaire, si vous besoin d'un identificateur pour être visible dans plus d'endroits, mais ce n'est souvent pas le cas. Mais une plus grande portée signifie plus de l'exposition à des erreurs. Les variables globales de la confusion de la sémantique des routines en rendant plus difficile de voir ce programme, d'utiliser et de changer, et il augmente la probabilité d'erreurs causées par le défaut de déclarer un identifiant local et d'autres erreurs.
En particulier, un identificateur externe couplage permettra d'entrer en collision avec les identifiants dans d'autres bibliothèques. Examinons ce qui se passe lorsque vous écrivez une application de la physique, ont un identifiant externe nommé
acceleration
, et le lien avec la physique de la bibliothèque qui a également un identifiant externe nomméacceleration
. Le programme échoue. De ce fait, d'identification externes sont généralement de mauvaise conception.Une limite considérablement notre capacité à développer et maintenir des logiciels complexes est une erreur humaine. Beaucoup de langage de programmation sémantique limites la langue pour éviter les erreurs. Avec les raw d'un ordinateur, vous pouvez ajouter deux pointeurs, corbeille de votre pointeur de pile, accidentellement charge les octets d'un
float
en entier s'inscrire, et ainsi de suite. Bonne langages de programmation rendre ces erreurs difficiles à faire, par erreur.Les variables globales ont été une grande source d'erreurs avant de règles de portée aidé à les contrôler. Les bons programmeurs limite la portée de leurs identifiants.
OriginalL'auteur Eric Postpischil
Une variable globale est bien, global, il peut être consulté à partir de n'importe où.
Une variable locale statique a une portée locale. Il est statique, c'est la durée de vie s'étend à travers la durée de vie de l'application, mais il ne peut être consulté à partir de la portée locale (si celui-ci est une fonction, d'un bloc, ou un fichier)
vrai, si vous avez l'adresse de la mémoire, alors vous avez accès mais n'est-ce pas s'appliquer à n'importe quelle variable? même avec des locaux non des variables statiques, vous pouvez, en théorie accès à l'emplacement de mémoire à partir d'un autre thread. Le langage statique de sorte que vous pouvez limiter la portée de cette variable pas d'un emplacement de mémoire
en outre, statique à filescope vous permet d'avoir le même nom de variable au niveau des fichiers représentant les différents emplacements de mémoire dans les différentes unités de compilation, tandis que les variables statiques à la portée de fichier avec le même nom partagent la même mémoire (ce qui est une caractéristique supplémentaire apporté par l'électricité statique).
OriginalL'auteur msam
La différence de base est à la portée de variable.
1) variable globale est global pour l'ensemble du projet. disons que votre projet a 10 fichiers différents, puis tous les 10 fichiers peuvent accéder à la variable globale(voir comment utiliser extern).
2) statique de la variable/fonction peut être utilisée par la fonction/le fichier dans lequel elle est définie. Il ne peut être utilisé par n'importe quel autre fichier dans votre projet.
encore, vous pouvez modifier la variable statique(défini dans func1()) dans func2() en passant de référence de la variable. s'il vous plaît regardez dans l'exemple ci-dessous,
Comme vous le voyez ci-dessus, func1() a
static int i
qui ne peut être manipulé directement par func2(), mais si vous passez de référence de la variable, vous pouvez toujours manipuler la variable comme de simples variables.espère que ça aide...
eh bien, vous pouvez restreindre vos fonctions au sein de fichier spécifique en utilisant statique... alors que vous pouvez accéder à des fonctions définies dans un fichier à partir de n'importe quel autre fichier en référence à la fonction de prototype à l'aide extern.....c'est primaire
OriginalL'auteur Kinjal Patel
Différence entre local et mondiale d'abord et avant tout est la portée: vous pouvez accéder à des variables locales uniquement à partir de l'intérieur du bloc qu'ils sont définis dans l', tandis que les variables globales peuvent être accessibles à partir de n'importe où. Par conséquent, vous ne pouvez avoir qu'une variable avec un nom donné dans la portée globale, mais vous pouvez avoir plusieurs locaux variables statiques dans les différentes fonctions.
Comme statique des variables globales contre extern variables: oui, charge statique global variables sont locales à l'unité de traduction (c'est à dire l' .fichier source c qu'ils sont définis dans).
Donc, la préoccupation principale ici est la notion de portée, et le stockage vient naturellement à partir de là.
Si nous avons une adresse, nous pouvons accéder à quoi que ce soit dans C, de même quelque chose qui n'est pas une variable et ne pas avoir un nom dans le code. Donc, oui. La portée est là que nous pouvons accéder à la variable par son nom, donc dans ce sens, la portée est limitée à la fonction où elle est définie. Sur le mémoire de la partie, vous avez raison, pas de pile de cours.
OriginalL'auteur unkulunkulu
La raison pour laquelle vous devez utiliser une variable statique locale est portée, et donc d'éviter certains bug situations propices puisque l'aide d'une variable statique, vous ne serez pas en mesure de le consulter en dehors de la fonction qu'il a été défini.
Pas de. Une adresse n'est pas une variable.
OriginalL'auteur Mppl
Voici un petit programme qui montre la différence:
De sortie:
Ici accolades aussi des questions: si aucun des accolades dans le
main()
fonction il se réfère variable statique locale seulement.local()
modifie le mondiala
).OriginalL'auteur user1627657