Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
985 connectés 

  FORUM HardWare.fr
  Programmation

  [C++] Utilité de déclarer une variable en extern ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] Utilité de déclarer une variable en extern ?

n°47068
Arlo13
Posté le 16-07-2001 à 19:04:34  profilanswer
 

Salut !
 
Je débute en C++, et lorsque que je déclare mes variables globales dans mon header, j'ai lu que je devais mettre le mot clé "extern" devant le type de ma variable globale...
 
A quoi sert ce "extern" ?
 
Merci de vos réponses :)


---------------
"Software is like sex it's better when it's free !!!! "
mood
Publicité
Posté le 16-07-2001 à 19:04:34  profilanswer
 

n°47087
la viper
Posté le 16-07-2001 à 20:48:58  profilanswer
 

il y a 2 types de variable :
- locale
- globale
 
de preference et le plus souvent possible, il faut utiliser les variable locale (elles ne se logent pas dans la meme partie memoire que les locales et peuvent etre detruite par l'OS ....)
 
maintenant la syntaxe extern ne s'applique qu'aux variable globales
imaginons que tu es 2 fichiers *.cpp qui font references à la meme variable globale
tu declares ta variable globale dans les 2 fichiers *.cpp
mais si tu fais ca, tu vas creer 2 fois une zone memoire pour la meme variable lors de la compilation
alors tu mets une des 2 declarations de ta variable avec la syntaxe extern devant, comme ca le compilo, quand il trouve l'instruction extern, ne reserve pas de memoire pour la variable globale.
 
ex :
 
fichier01.cpp
#include "header.h"
int VARIABLE;
 
fichier02.cpp
#include "header.h"
extern int VARIABLE;
 
fichier03.cpp
#include "header.h"
extern int VARIABLE;
 
etc...

n°47424
HelloWorld
Salut tout le monde!
Posté le 18-07-2001 à 09:33:55  profilanswer
 

"il faut utiliser les variable locale ( [..] et peuvent etre detruite par l'OS ....)"
:??:


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°47479
la viper
Posté le 18-07-2001 à 11:10:53  profilanswer
 

les variables locales ne se logent pas dans la m zone memoire que les variable globales..
 
les variables locales se situent dans le stack alors que les variables globales se mettent dans un zone de la mémoire conventionnelle et cette zone n'est liberé que lors de la fermeture du programme. De plus, plus tu crees de variable globales et moins tu as de memoire pour ton programme.
 
Contrairement au variable globale, les variables locales se mettent dans le stack (pile fifo) géré par l'OS ou le compilateur le cas echeant. Quand la variable locale est détruite, elle est enlevé du stack et laisse la place pour une autre variable locale.
 
Voila pourquoi, il faut previlegier les variables locales au globales.

n°47487
seblamb
Posté le 18-07-2001 à 11:25:15  profilanswer
 

D'autres raison d'éviter les variables globales :
 ça rend les sources des gros programmes ilisibles
 ça complique la tache quand le programme est multithread


---------------
[:seblamb] Moi aussi je veux grater dédé!!!
n°47513
HelloWorld
Salut tout le monde!
Posté le 18-07-2001 à 12:02:18  profilanswer
 

"les variables locales se mettent dans le stack (pile fifo) géré par l'OS ou le compilateur le cas echeant"
 
ca je sais qu'elles sont dans la pile
ce ke je comprend pas c'est en quoi l'OS gere la pile ?
c'est le compilo = le programme qui se la gere
 
quand tu cree une variables locale, le programme incremente le pointeur de pile de la taille de cette variable
quand la fonction est terminee, il re-initialise le pointeur avec son acienne valeur
je vois pas où l'OS intervient
 
cela fait ressurgir une vieille question
j'avais lu dans un magazine consacre a la securite sous LINUX que pour empecher les buffer overflow, on pouvait compiler son noyaux en interdisant d'ecrire dans la pile
j'aimerais bien savoir comment cela est possible
dans ce cas, les programmes ne peuvent plus faire de PUSH ou POP, et ils sont rudement emmerdes
ou alors y'a un truc ?
pouvez vous m'eclairer :??: :)


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°709500
HelloWorld
Salut tout le monde!
Posté le 27-04-2004 à 11:24:52  profilanswer
 

Quel newbie ce HelloWorld.
Alors voilà je t'explique : il s'agit d'interdire l'exécution de code se trouvant dans la pile, chose malheureusement pas possible sous x86 car Intel ne permet pas de créer un segment en lecture qui ne soit pas exécutable.

n°709540
pascal_
Posté le 27-04-2004 à 11:48:35  profilanswer
 

[:666rip666]


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [C++] Utilité de déclarer une variable en extern ?

 

Sujets relatifs
Utilité des classes en c++[Perl] récuperer dans une variable le contenu d'un fichier HTML
[PHP4] comment déclarer les variables d'une variable ?JAVASCRIPT : comment recuperer une variable PHP ?
[php] et recuperation de variableVariable sous DOS
[Delphi] Variable[php] Comment récupérer dans une variable PHP une variable JavaScript
(PHP) comment executer une fonction PHP stockee dans une variable????? 
Plus de sujets relatifs à : [C++] Utilité de déclarer une variable en extern ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR