Un contributeur hautement réputé Il parlait de variables globales. Mais je ne suis pas sûr de ce qui se passe avec les constantes déclarées à l'intérieur du http://www.indiabix.com/c -Programmer / const / discussion-546 p> peut-on expliquer s'il est valide dans C d'affecter une valeur de retour à une constante? p> p> "R .." code> sur ce forum m'a explicitement dit que 2 jours de retour:
Les initialisateurs des objets de la durée de stockage statique doivent être des expressions constantes. Le résultat d'un appel de fonction n'est pas une expression constante. Code> P>
Main () Code> Fonction ou n'importe quelle fonction de cette affaire.frait, je pense que cela est si intuitivement, même pour les constantes déclarées dans les fonctions, le programme suivant obtenu à partir du lien suivant, avec son (selon son
correct code>, me confondre . P>
3 Réponses :
Oui, c'est parfaitement valide, car votre variable est automatique, c'est-à-dire Les restrictions s'appliquent à Notez que c Diffuse entre "expressions constantes" et autres expressions, et que la valeur initiale utilisée pour statique code>. P>
statique code> variables, dont les valeurs doivent être connues à la compilation. p>
statique code> variables doit être une expression aussi constante. Pour les variables code> statiques code>, il n'y a pas de telle exigence. P>
Il sera très utile que vous puissiez partager d'autres faits à ce sujet.Veuillez élaborer un peu si cette question est une duplication. Je suis sûr que de nombreux autres débutants aimeraient en apprendre davantage à ce sujet.
Dans une langue avec autant de comportement non défini non défini et défini par la mise en œuvre, "juste l'essayer" n'est presque jamais une réponse utile à une question de "est-ce légal?".
@Cairnarvon Great, comme si je n'étais pas déjà confondu déjà, je vois quelqu'un avec une réputation de 123 000 étant révélée. Cairnarvon Code> Veuillez le poster dans une réponse, je suis sûr que beaucoup d'autres comme moi en profiteront.
@Cairnarvon Fair Point, bien que la suggestion "Essaye" est assez commune ici, elle laisse trop trop à la mise en œuvre. J'ai ré-écrit, merci.
@Shereerfish descendez-moi, c'est bien, ça me rend meilleur! REP est gentil mais pas magique.
@unWind se détendre code> Veuillez élaborer votre réponse un peu plus. Cela semble être trop important à ce problème.
@unwind Roulez-vous, aidez-moi sur cela.Un utilisateur appelé comportement non défini code> me dit qu'il n'y a pas de variables globales en C et que "les variables globales en C" est un terme trompeur.Veuillez confirmer cela. Je l'avais acheté dans ma tête que dans C toutes variables à la portée du fichier, déclarés à l'extérieur de toutes les fonctions sont appelées
variables globales code>
@Koushik Certains peuvent avoir envie de harceler se détendre code> sur ce forum, mais je dirais que votre commentaire me rappelle l'histoire des mathématiciens Hardy & Ramanujam quand ils voyagaient dans une voiture et ont vu la plaque d'immatriculation de Un taxi qui passe dire que vous êtes le prochain ramanujam cependant :-)
Mot que je traque mais j'apprécie vraiment la qualité des questions et réponses ici. Vos questions sont également délicates. Merci de l'occasion d'apprendre :-). Bien sûr que je ne suis pas ramanujan et je ne peux même pas rêver d'être :-)
@Koushik j'ai vérifié, ce serait un autre + 20.Ils 123436 maintenant
Non, sa réputation ne sera-t-elle pas mise à jour de Coz Son atteint sa limite ou donc je suppose qu'auriez dû être complet d'ici. :-)
Oui, cette affectation est valide C. mais Une expression constante entière doit avoir un type entier et disposer d'opérandes
qui sont des constantes entière, des constantes de dénombrement, des constantes de caractère, Les constantes d'entier ressemblent à x code> n'est pas une expression constante, il s'agit d'une variable de const-qualification, qui n'est pas la même chose (au moins en C).
tailleof code>
expressions dont les résultats sont des constantes entière,
_alignof code> expressions et flottant
constantes qui sont les opérandes immédiates des moulages. P>
blockQuote>
42 code>,
0L code> ou
89.0 code>. Par exemple, dans l'extrait de code suivant,
2 code> est une constante entière, mais
x code> n'est pas. P>
Il sera extrêmement utile que vous élaborez un peu à peu près la différence entre les variables qualifiées de Cons et les expressions constantes dans ce contexte. Merci
Bien que je dois admettre votre avatar-photo code> m'a distrait depuis un moment. Nous ne voyons pas beaucoup sur ce forum, et très peu à côté de cette réputation élevée
Venez sur Mademoiselle de France, veuillez élaborer un peu plus sur Const-qualifié Variable CODE> VS
Const-qualifié Variable CODE> dans cet endroit.plz
@Shereerfish n'a jamais jamais averti à personne des représentations sur Internet?
@ondefineDeHaviour Quoi de Représentations de pièges Code>? S'il vous plaît dire
@Shereerfish "Représentations de pièges" est pour E.g comme un syndicat ayant INT et Double, vous attribuez une valeur à la double mais l'accédez à la variable INT (qui est indéfinie). vous "peut-être" (en raison de la mise en œuvre), capable de modifier la valeur d'une variable de const mais son indéfini
@Sereerfish qui n'est pas une photo de l'utilisateur Kirilenko, c'est Le joueur de tennis , de qui notre Kirilenko apparemment est un ventilateur.
@Danielfischer ne savait pas que.Stopped regardant le tennis depuis les jours des joueurs de Sharapova.Russie est plus célèbre de la Cour qu'au cours de là.
Ce que je pense vous fait confondre, c'est que vous mélangez le qualificatif em> em> la durée de stockage statique em> signifie qu'une variable existera tout au long de l'exécution d'un programme. Toutes les variables déclarées comme alors quelqu'un peut-il expliquer s'il est valide dans C pour attribuer une valeur de retour à une constante? p>
blockQuote>
Cela dépend. P>
Comme vous pouvez le constater, cela n'avait rien à voir avec le mot clé const code>, avec le spécificateur stockage de stockage em>
statique code>. Ce sont des fonctionnalités entièrement différentes, vous ne pouvez pas les comparer les uns avec les autres. P>
const code> signifie qu'une variable est en lecture seule dans la portée où elle a été déclarée, et il ne peut être donné qu'une valeur lorsqu'elle est initialisée. C'est-à-dire sur la même ligne où la variable
const code> a été définie. Cela signifie rien d'autre. p>
statique code> et toutes les variables déclaralisées à la portée du fichier ("globaux") ont une durée de stockage statique. Comme mentionné, les variables avec durée de stockage statique ne peuvent être initialisées qu'avec une expression constante em>, qui ne doit pas être confondue avec des variables en lecture seule déclaré comme
Const code>. P>.
const code> mais tout à voir avec où la variable a été déclarée. Avait la variable,
const code> ou non, été déclarée à l'intérieur d'une portée locale, il serait parfaitement bien d'initialiser avec n'importe quelle valeur, comme illustré par votre exemple de code. P>
... et IIRC, je vous ai dit il y a deux jours qu'il n'y a pas de telles choses telles que Global Variables i> en C, et que vous parlez de variables déclarées à la portée du fichier qui ont une durée de stockage statique. Il y a une très grande différence. Les variables déclarées à la portée des fichiers ont beaucoup moins de visibilité; Ils sont seulement i> visibles dans leur propre unité de traduction, après i> leur déclaration. Les variables globales sont également visibles en dehors de leur unité de traduction et avant leur déclaration.
@undefinedbehaviour dans quel contexte vous avez posté ce commentaire? Êtes-vous
r .. code> en utilisant un autre identifiant? Qui est IIRC? BTW, n'y a-t-il vraiment aucune variables globales en C? Les variables ne sont-elles pas déclarées en dehors de toutes les fonctions Variables globales?
Dans le contexte des "variables globales en C", qui n'existent pas pour les raisons que j'ai indiquées ci-dessus, j'ai mentionné qu'ils n'existent pas. Je ne suis pas r .. IIRC signifie "si je me rappelle correctement". Vous pouvez rechercher "Global" dans la standard C, si vous le souhaitez, et que ça ne viendra rien de pertinent. Comme je l'ai dit précédemment, les variables déclarées en dehors de toutes les fonctions sont déclarées au champ d'application de fichier i>, avec Durée de stockage statique i> et ils sont visibles seulement du point de déclaration jusqu'à ce que la fin de l'unité de traduction i>. Ceci est différent de la définition de variable globale i> dans d'autres langues.
@undefineDeHaviour Je l'avais percée dans ma tête comme une règle rapide du DUR n que les variables extérieures aux fonctions sont appelées «variables globales» dans C.Can, vous donnez une définition rigoureuse? qu'est-ce que j'appelle de telles variables en C alors?
@undefinedbehaviour même des livres et des sites Web populaires sur C utilise ce terme.
Wikipedia semble donner une très bonne définition, dans la toute première phrase. Qu'est-ce que vous ne comprenez pas la "portée du fichier"? Est
int foo = bar; int bar = 0; code> correct? Pourquoi pas? Cela ne signifie-t-il pas que "la barre n'est pas accessible dans chaque portée"? Cela ne serait-il pas une violation de la définition de "global"?
@undefinedbehaviour ah! Maintenant que cela rend les choses beaucoup plus claires.
int foo = bar; int bar = 0; code> n'est pas correct car la première instruction ne reconnaîtra pas
bar code>, mais alors
bar code> est supposé être accessible partout dans le fichier. Donc, ce n'est pas certainement
global code> .now ai-je compris le tout? S'il vous plaît dites oui ou non.
Oui. Considérez en JavaScript, où
fonction FOO () {bar = 42; } code>
var bar = 0; code> est valide ... Considérez que, en C #, un module peut être compilé et le compilé
dll code> lié à un
EXE code>. Tous les globaux dans ce
DLL code> sont visibles au
exe code>. Est-ce vrai des variables déclarées à la portée du fichier en C?
@undefinedbehaviour heureux que j'ai compris.As de
dll code> et
EXE code>, je ne sais pas très bien ce que je sais que je sais que dans le code source multi-fichier C, si un La variable est définie dans
fichier1 code> mais est également utilisée dans
fichier2 code>, puis dans
fichier2 code> il est déclaré avec le mot clé code> .
Je suis content que vous soyez maintenant au courant, si seulement partiellement, de la distinction entre Variables globales i> et les variables déclarées à la portée du fichier i>. Cela vous aidera à comprendre Variables globales i> mieux dans d'autres langages de programmation.
@undefinedbehaviour partiellement? Même après tant de discussions? Qu'est-ce que je dois encore apprendre alors?