Pourquoi ne pouvons-nous pas déclarer une variable statique dans une structure dans la langue de programmation C? P>
4 Réponses :
parce que c n'est pas C ++. P>
Parce que la norme C ne le permet pas. p>
car il n'a aucune interprétation significative en c. p>
en C ++, une structure est essentiellement une classe avec tous les membres publics, une variable statique a du bon sens là-bas. P>
en C, une structure est une pièce de mémoire contiguë avec des champs. Une variable statique ne peut pas être créée sans changer (comme pour implémenter une statique, vous devez vous reporter à un seul emplacement de mémoire de toutes les structures de ce type), ce qui constituerait une grande différence de complexité sans avantage. P>
Je serais SY c'est une raison assez forte.
Pourtant, je n'aurais pu avoir que des membres statiques dans la structure qui l'auraient fait contiguë
Parce que dans C, nous ne pouvons pas accéder à une variable statique avec le nom de la conducteur. En C ++, nous pouvons accéder à une variable de membre statique avec un nom de classe, comme ci-dessous. P>
Nom de classe :: staticvariablename p>
«C» la conducture ne fournit pas de telles installations. P>
Variables statiques forts> ne doit pas être déclarée à l'intérieur de la structure. La raison est que le compilateur C nécessite l'ensemble des éléments de la structure (c'est-à-dire une allocation de la mémoire pour les membres de la structure devrait être contiguë. Il est possible de déclarer la structure à l'intérieur du fonctionnement (segment de pile) ou d'allouer de la mémoire dynamique (segment de tas) ou peut être même globale (BSS ou segment de données). Tout ce qui pourrait être le cas, tous les membres de la structure doivent résider dans le même segment de mémoire, car la valeur de l'élément de structure est récupérée en comptant le décalage de l'élément à partir de l'adresse de début de la structure. Séparer un membre seul au segment de données défait le but de la variable statique. P>
Il est possible d'avoir une structure entière comme statique. em> p>
Référence: https://fr.wikipedia.org/wiki/static_(Keyword) p>
Parce que la norme ISO C dit que vous ne pouvez pas. Mais si vous disez pourquoi vous pensez que vous en avez besoin, il serait peut-être possible de fournir une solution de contournement pour tout ce que ce sera.
Même en C ++, il n'y a pas de telle chose comme une variable code> statique code> à l'intérieur d'une structure. Celles-ci sont des membres code> statiques code> et c'est vraiment dommage que C ++ surcharge le mot-clé code> statique code> pour une autre sémantique complètement différente. En particulier, cela signifie le contraire du
statique code> dans le fichier ou la portée de la fonction, à savoir un symbole visible globalement. Je ne vois vraiment aucune utilisation de cela. Si vous aviez demandéextern code>, ce pourrait i> de sens en c, mais ce serait une histoire différente.@Jens:
statique code> dans la fonction de fonction signifie que toutes les invocations de la fonction partagent la même instance d'une variable. De même,statique code> dans une classe signifie que toutes les instances de la classe partagent la même instance du champ. Il me semble que la réutilisation du mot clé est parfaitement bien motivée.@John: Je n'ai pas dit que ce n'était pas motivé, c'est malheureux. Quelque chose comme
commun code>,global code> tout ce qui aurait été plus approprié. Et l'histoire commence déjà en C avec les deux significations différentes (fichier contre la fonction de fonction) et se poursuit en C99 avec l'utilisation destatique code> pour une limite inférieure sur la taille de la matrice dans les paramètres de fonction. Tout cela complique superflu de la langue en ajoutant une sensibilité contextuelle aux mots-clés.