Qu'est-ce que Variable ?

Conteneur nommé qui conserve une valeur dans un programme. On la déclare avec un type, comme integer ou real, et on la modifie par affectation. Affecter une nouvelle valeur efface la précédente.

Nom japonais: 変数

« Variable » apparaît dans 73 questions d'entraînement réparties sur 11 thèmes, dont Éditeurs de liens, chargeurs et exécutables, Bases de la programmation (trace de pseudo-code), Multicœur et synchronisation.

Domaine: Bases de la programmation (trace de pseudo-code)

S'entraîner : questions sur Variable

Lorsqu'on examine au débogueur un programme compilé avec optimisation, certaines variables apparaissent parfois comme « non affichables ». Quelle en est la principale raison ?

  1. AL'optimisation empêche totalement le débogueur de charger le programme
  2. BLes valeurs des variables changent aléatoirement à chaque compilation
  3. CLa valeur ne subsiste plus, du fait de la réutilisation des registres ou de la suppression de calculs
Afficher la réponse et l'explication

Réponse : C. La valeur ne subsiste plus, du fait de la réutilisation des registres ou de la suppression de calculs

L'optimisation traite les variables uniquement en registres sans les placer en mémoire, et réutilise ces registres pour d'autres valeurs une fois la variable devenue inutile. La propagation de constantes peut aussi faire disparaître le calcul lui-même. Au point d'arrêt du débogueur, la valeur de la variable peut donc ne subsister nulle part, d'où un affichage du type « supprimée par l'optimisation ». Pour déboguer, on réduit généralement l'optimisation ou l'on utilise un réglage d'optimisation adapté au débogage. Le débogueur reste capable de charger le programme.

Dans quelle section est généralement placée une variable globale écrite hors de toute fonction en C sous la forme « int limit = 100; » ?

  1. A.data (données initialisées)
  2. B.bss (données non initialisées)
  3. C.text (langage machine)
Afficher la réponse et l'explication

Réponse : A. .data (données initialisées)

Les variables globales et statiques ayant une valeur initiale non nulle sont placées dans la section .data, et leur valeur initiale est stockée dans le fichier. Au chargement du programme, ce contenu est copié tel quel en mémoire ; limit vaut donc 100 au début de main. .data étant modifiable pendant l'exécution, c'est une zone où lecture et écriture sont autorisées.

« Variable » dans les explications

Questions mentionnant « Variable » (73)

  1. Lorsqu'on examine au débogueur un programme compilé avec optimisation, certaines variables apparaissent parfois comme « non affichables ». Quelle en est la principale raison ?
  2. Dans quelle section est généralement placée une variable globale écrite hors de toute fonction en C sous la forme « int limit = 100; » ?
  3. Parmi les variables globales ci-dessus, quelle combinaison correspond à celles généralement placées dans la section .bss ?
  4. Où est placée pendant l'exécution une variable locale (variable automatique) sans static déclarée dans une fonction C ?
  5. En C, quelle affirmation concernant la valeur initiale d'une variable locale et d'une variable globale déclarées sans valeur initiale est correcte ?
  6. Deux cœurs possèdent chacun dans leur cache une copie de la variable x. Après une écriture de x par le cœur 0, quel problème peut survenir lors de la lecture de x par le cœur 1 en l’absence de mécanisme de cohérence de cache ?
  7. Le code ci-dessus double la variable partagée counter au moyen de CAS(&p, valeur attendue, nouvelle valeur). Dans quel cas le CAS échoue-t-il et la boucle recommence-t-elle ?
  8. En C, pourquoi ajouter seulement volatile à une variable drapeau échangée entre threads est-il insuffisant comme synchronisation ?
  9. Sur un microcontrôleur 8 bits, une interruption de temporisateur incrémente une variable 32 bits ticks, et le traitement principal lit ticks pour calculer le temps écoulé. Quelle est la cause des valeurs parfois très erronées ?
  10. Le programme suivant fait circuler des valeurs entre trois variables. Quelles sont les valeurs de a, b et c après son exécution ?
  11. Dans les boucles imbriquées suivantes, la boucle intérieure part de la variable i de la boucle extérieure. Quelle est la valeur de c après l'exécution ?
  12. ÷ est la division ; quand le résultat est affecté à une variable entière (y compris un argument de fonction), la partie fractionnaire est supprimée. Quelle est la valeur de retour de la fonction f suivante appelée sous la forme f(9087) ?
  13. ÷ est la division ; quand le résultat est affecté à une variable entière (y compris un argument de fonction), la partie fractionnaire est supprimée. Quelle est la valeur de retour de la fonction toBin suivante appelée sous la forme toBin(12) ?
  14. ÷ est la division ; quand le résultat est affecté à une variable entière (y compris un argument de fonction), la partie fractionnaire est supprimée. Lorsque la fonction pow suivante est appelée sous la forme pow(2, 10), combien de fois pow est-elle appelée, premier appel compris ?
  15. ÷ est la division ; quand le résultat est affecté à une variable entière (y compris un argument de fonction), la partie fractionnaire est supprimée. Le programme suivant place dans lo l'indice de la première valeur supérieure ou égale à x dans le tableau d'entiers data, trié par ordre croissant (les indices commencent à 1). x n'est pas supérieur au dernier élément de data. Que faut-il écrire à la place de 【a】 dans le programme ?

Termes associés

Pile (stack) Tableau Argument Pointeur Récursion (récursivité) Microcontrôleur Valeur de retour Ligne de cache Éditeur de liens (linker) volatile (qualificateur de type)

Retour au glossaire