10
votes

Pourquoi ne pouvons-nous pas déclarer une variable statique dans une structure dans la langue de programmation C?

Pourquoi ne pouvons-nous pas déclarer une variable statique dans une structure dans la langue de programmation C?

c

4 commentaires

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 statique à l'intérieur d'une structure. Celles-ci sont des membres statiques et c'est vraiment dommage que C ++ surcharge le mot-clé statique pour une autre sémantique complètement différente. En particulier, cela signifie le contraire du statique 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 , ce pourrait de sens en c, mais ce serait une histoire différente.


@Jens: statique 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 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 , global 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 de statique 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.


4 Réponses :


5
votes

parce que c n'est pas C ++.

Parce que la norme C ne le permet pas.

car il n'a aucune interprétation significative en c.


0 commentaires

16
votes

en C ++, une structure est essentiellement une classe avec tous les membres publics, une variable statique a du bon sens là-bas.

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.


2 commentaires

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ë



0
votes

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.

Nom de classe :: staticvariablename

«C» la conducture ne fournit pas de telles installations.


0 commentaires

3
votes

Variables statiques 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.

Il est possible d'avoir une structure entière comme statique.

Référence: https://fr.wikipedia.org/wiki/static_(Keyword)


0 commentaires