Bonjour les gens,
Dans une procédure, si j'ai une variable B de type Boolean. Quelle est sa valeur par défaut à la première ligne de la procédure ?
Bonjour les gens,
Dans une procédure, si j'ai une variable B de type Boolean. Quelle est sa valeur par défaut à la première ligne de la procédure ?
Indéterminée, elle peut être VRAI comme FAUX.
indéterminée, en informatique, c'est super pour les bugs aléatoires
Et tu sais ça comment ? C'est noté dans un coin de la doc ?
Il me semblait que c'était initialisé à False . Encore une certitude qui s'évapore.
Je dirais que ça a toujours été ainsi
Tu alloues un bloc mémoire mais son contenu n'est pas touché. C'est plus ou moins gênant dans certains cas (le tiens actuel) mais on peut aussi se dire "pourquoi effacer ce bloc, je vais le remplir juste derrière ?" et donc gagner du temps.
La même chose survient avec des fichiers ; on peut en fixer la taille sans rien y écrire. Le fichier contiendra ce qu'il y avait sur le disque à cet instant :
Il y a tout de même des subtilités ; quand on parle de variables locales/globales, il faut distinguer deux types de données : les types avec compteur de référence et les autres.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Handle := CreateFile(...); SetFilePointerEx(Handle, UneTailleArbitraire, nil, FILE_BEGIN); SetEndOfFile(Handle);
Les types avec compteur de référence (chaînes, interfaces, etc.) sont toujours initialisés.
Ça s'explique assez aisément ; si une chaîne n'était pas initialisée, son compteur de référence vaudrait n'importe quoi. Y insérer un texte impliquerait donc le décrément du compteur et par conséquent la corruption d'une zone mémoire. VA presque assurée
Tu aurais donc posé la même question pour une chaîne, je t'aurais répondu "elle est vide" mais un booléen on ne sait pas
Tu confonds, les propriétés d'un objet sont initialisées à zéro (nil) lors de son instanciation.
Bonjour,
avec D7 j'ai toujours vu que les booléens étaient initialisés par défaut à False. Mais par sécurité, j'initialise toutes les variables (c'est peut être un peu lourding ? mais ceinture et bretelles ...)
A+
Charly
PS : vu le post de AndNotOr, c'est surement un coup de chance qu'ils soient à False !
Bonjour,
les variables globales sont initialisées par le compilateur
les variables locales elles sont indéfinieshttp://docwiki.embarcadero.com/RADSt...ables_(Delphi)Envoyé par Aide en ligne de Delphi
Cordialement,
@+
J'irai même plus loin, elle peut être VRAI ($01) comme FAUX ($00) comme VRAI($03) comme VRAI($1A) ...
J'avais eu un problème à cause de ca une fois, un if monBool = True then qui ne rentrait pas dans le if, alors que l’évaluateur m'affichait monBool comme true, mais monBool($08) <> True($01)
Tout ça me fait me poser la question suivante:
"Qu'est-ce que ça aurait coûté de plus d'initialiser la valeur à faux ?"
Surement pas grand-chose et ça aurait évité surement pas mal de problèmes comme celui que j'ai rencontré tout récemment ( d'où ma question )
Du temps
GetMem est plus rapide que AllocMem. Cette différence était sans doute non négligeable à l'époque, certainement moins maintenant il est vrai.
c'est vrai. Encore que .... il m'est arrivé quelques fois que Delphi me dise qu'une variable n'était pas initialisée ...
Je l'initialise et ... Delphi me dit que la valeur affectée n'est pas utilisée![]()
il arrive qu'il se trompe, mais parfois c'est aussi parce qu'il a une logique implacable:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 begin case toto of 1 : titi := 'u'; 2 : titi := 'x'; end; if titi = 'x' then // warning car toto pourrait être égale à 3 par exemple et du coup titi non initialisé end;avec la gestion des exceptions ça complique encore un peu plus les choses
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 begin titi := '?': // warning car '?' sera toujours remplacé par 'u' ou 'x' if toto = 1 then titi := 'u' else titi := 'x'; end;
Partager