Bonjour,
J'aimerais savoir pourquoi doit-on initialiser une variable ou un tableau ? J'aimerais comprendre le but précis de cette pratique.
Merci d'avance
Bonjour,
J'aimerais savoir pourquoi doit-on initialiser une variable ou un tableau ? J'aimerais comprendre le but précis de cette pratique.
Merci d'avance
L'important est qu'une variable ait été écrite avant d'être lue, sinon la lecture donne n'importe quoi.
Initialiser une variable permet d'être sûr qu'elle ne contienne jamais n'importe quoi.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Il n'est pas obligatoire d'initialiser si j'ai bien compris ?
Non ça n'est pas "obligatoire" si tu sais que ta variable sert à "d'abord" récupérer une valeur avant de l'envoyer ailleurs...
La fonction time() va renvoyer un nombre et il sera utilisé après... donc dans ce cas tu déclares une variable "sans initialiser", puis dans le code la 1ère chose faite sera d'appeler time() et de mettre une valeur dans ta variable.
A l'inverse, si tu code en C89, le for permettra de ne pas avoir à initialiser la variable (si et seulement si tu t'en sers pour énumérer) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 time_t var; var = time();
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 int i; for (i = 0; i != 100; i++)
--
Metalman !
Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
(ANSI retire quelques fonctions comme strdup...)
L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
Et s'assurer que la logique est bonne "aussi" !
Ma page Developpez.net
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
Hello,
Non, pas en C, car d'une part, la meilleure valeur initiale n'est pas forcément zéro plus qu'autre chose. C'est quand même vrai la plupart du temps mais dans tous les cas, ça dépend du contexte.
Ensuite, parce que cela a un coût : si tu veux que ta variable ait une valeur initiale, il faut d'abord la stocker dans ton exécutable puis aller mettre explicitement cette valeur dans ta variable à l'exécution. Avec des langages de plus haut niveau, ces valeurs peuvent être garanties mais le C, lui, sert à écrire des programmes au plus proche de la machine pour se passer de l'assembleur. Il est donc plus important d'avoir un contrôle sur ces choes-là et de ne pas intégrer de « couches intermédiaires » implicites si ce n'est pas strictement nécessaire.
Avec cela, il faut se souvenir que le C date de 1972 et que même aujourd'hui, il peut encore être utilisé pour produire des programmes sur des architectures modestes. À l'époque, les machines étaient nettement plus restreintes en mémoire et en rapidité d'exécution. Sans aller jusqu'au PDP-10 et aux mainframes à bande magnétique, le tout premier IBM PC de 1981 dont dérivent encore les machines actuelles n'était équipé que de 16 Kio de mémoire vive. Oui, 16384 octets de mémoire et pas un de plus.
Quelle est la définition de "initialiser" ?
Est-ce :
1) donner une valeur à la variable dès sa déclaration ?
2) donner une première valeur à une variable, que cela soit avant la déclaration ou après ?
Dans le deuxième cas, je serais curieux de voir un programme qui tient la route sans une seule initialisation.
Dans le premier cas, bien sûr que l'initialisation n'est pas obligatoire, mais il faut quand même savoir ce que l'on fait...
Hum, sémantiquement, "initialiser" dérive de "initial" (au début). Donc (selon moi) ça parlait de donner une valeur systématique à la création.
Mais j'ai bien aimé la phrase de Medinoc qui dit qu'il faut simplement s'assurer de toujours écrire au-moins une fois avant de lire.
...
Code c : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 int main() { int i; printf("Hello world !\n"); return 0; }
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
Cela signifie littéralement « mettre dans l'état initial ». Et quand on remet — ou ramène — une variable ou n'importe quel système à l'état initial, on dit « réinitialiser », dit « reset » en anglais, qui se traduit plutôt par « réarmer ».
Ça se réfère surtout aux automates finis dans lequel on a généralement un ou plusieurs points de départ. Un système est toujours forcément dans un des états que l'on a défini (par exemple : allumé ou éteint) mais s'il sert à prendre une décision ou faire un calcul, on définit aussi explicitement l'état dans lequel il doit se trouver au moment où l'on démarre le processus.
A priori, l'initialisation des variables doit donc avoir lieu avant l'exécution du programme et c'est pour cela qu'il existe une section spécialisée dans les fichiers exécutables contenant toutes ces valeurs initiales quand elles ne sont pas nulles. En pratique, ça dépend de l'endroit où tu places ton périmètres : tu peux très bien initialiser une variable à l'exécution avant de rentrer dans une routine ou au tout début de celle-ci.
En ce sens, cela tombe sous le coup de ton cas numéro « 2) ». Par contre, « donner une première valeur » n'est pas une définition suffisante. En effet, dans l'exemple suivant :
« c » n'a pas du tout besoin d'être initialisée pour garantir le succès de l'opération : ni pour le bon fonction de fgetc(), ni pour la validité des données que l'on en tire après.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 #include <stdio.h> int main (void) { char c; c = fgetc(stdin); printf ("%c\n",c); return 0; }
Oui.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 int i=10; // <- initialisation int j; // <- déclaration j=10; // <- affectationOn ne peut pas donner une valeur à une variable avant sa déclaration, c'est soit en même temps, sois plus tard, soit jamais ...2) donner une première valeur à une variable, que cela soit avant la déclaration ou après ?
ɹǝsn *sıɹɐlos*
Hum... pas certain...
Code c : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 int i=123; // Définition de i - Initialisation dans la foulée int main() { extern int i; // Déclaration de i (pas obligatoire mais facilite la relecture et la maintenance) printf("i=%d\n", i); // Affichera i=123 }
On a donc bien une initialisation... avant la déclaration...
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
Bien vu, je voulais bien sûr dire on ne peut pas affecter une variable avant sa définition.
ɹǝsn *sıɹɐlos*
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager