IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

excefile et variables globales


Sujet :

Python

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 36
    Par défaut excefile et variables globales
    Bonjour à toutes et à tous,

    J’ai un petit problème avec excefile et les variables globales.
    Mon environnement : windows XP et python 2.7
    Fonction du programme : via une IHM (sous wxpython) je veux lancer des scripts externes. Ce soft est compilé en exe avec py2exe, or les scripts ne peuvent pas être intégré à l’exe car ils doivent être modifiable, c’est pourquoi j’utilise la fonction excefile. Dans cette application il y a deux « types » de script : un fichier de config pour seter des variables et des fichiers de script utilisant ces variables. J’appel variables global les variables setées dans le fichier de config. Pour que mon projet soit plus lisible je sépare chaque fonction (IHM, gestion fichiers,…) dans des fichiers .py séparés.
    Mon code
    Voici un exemple très très simplifié de mon programme :

    config.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/usr/bin/env python
    # _*_ coding: utf-8 _*_
     
    print "in config.py set de ma_var_1"
     
    ma_var_1 = 123
    script.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #!/usr/bin/env python
    # _*_ coding: utf-8 _*_
     
    print "in script Main ma_var_1 =",ma_var_1
     
    def MyFunction():
    	print "in MyFunction ma_var_1 =",ma_var_1
     
    MyFunction()
    IHM.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/usr/bin/env python
    # _*_ coding: utf-8 _*_
     
    import FileMgnt
     
    FileMgnt.run()
    FileMgnt.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #!/usr/bin/env python
    # _*_ coding: utf-8 _*_
     
    def run():
    	print "start RUN"
    	execfile("config.py")
    	print "*"*99
    	execfile("script.py")
    Le problème est que dans le fichier script.py la variable globale : ma_var_1 n’est pas connu, même si on rajoute global ma_var_1 avant.

    Je pense avoir un peu cerné le problème car lorsque j’utilise le code suivant (runV2.py) avec les mêmes fichiers de script et config cela fonctionne. Et comme explique plus haut je ne veux pas mettre tout le code dans un même fichier .py car actuellement le programme fait 10 000 lignes.
    Voici le code :

    runV2.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #!/usr/bin/env python
    # _*_ coding: utf-8 _*_
     
    print "start RUN V1"
    execfile("script1.py")
    print "*"*99
    execfile("script2.py")
    Le problème ne se confine pas qu’aux variables passés de config à script mais aussi aux noms de fonction dans script comme le montre ce script :

    script2.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #!/usr/bin/env python
    # _*_ coding: utf-8 _*_
     
    print "in Main ma_var_1 =",ma_var_1
     
    def MyFunction():
    	print "in MyFunction ma_var_1 =",ma_var_1
     
    def MyFunction2():
    	MyFunction()
     
    MyFunction2()
    Ce code fonctionne correctement, mais dès que la fonction excefile est dans un autre fichier import cela ne fonctionne plus. Le problème ne se confine pas qu’aux variables passés de config a script mais aussi aux noms de fonction dans script comme le montre ce script :

    script2.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #!/usr/bin/env python
    # _*_ coding: utf-8 _*_
     
    print "in Main ma_var_1 =",ma_var_1
     
    def MyFunction():
    	print "in MyFunction ma_var_1 =",ma_var_1
     
    def MyFunction2():
    	MyFunction()
     
    MyFunction2()
    Par contre dans ce cas, si on rajoute global MyFunction le script rebloque à l’affichage de la variable. Mais cela n'est pas une solution pour car j’ai une dizaine de fonction dans chaque script et cela alourdi (pour l’humain) la lecture des scripts.

    Ce que je constate :
    Les variables locals() et globals() ne sont pas correctement passés lors d’un appel a une fonction.

    Si vous avez des idées ou des questions pour mieux comprendre mon problème, merci de me répondre.


    Merci d’avance
    Jean-Michel

  2. #2
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    Pourquoi utiliser execfile ? Regardez l'exemple des pipes avec subprocess (17.1.3.2. Replacing shell pipeline).

    @+

    (Un code de 10 OOO lignes )

  3. #3
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/usr/bin/env python
    # _*_ coding: utf-8 _*_
    #
    # config.py
    ma_var_1 = 123
    print ma_var_1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #!/usr/bin/env python
    # _*_ coding: utf-8 _*_
    #
    # script.py
    import sys
     
    def MyFunction():
        print "in MyFunction ma_var_1 =", sys.argv[1]
     
    MyFunction()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #!/usr/bin/env python
    # _*_ coding: utf-8 _*_
    #
    # FileMgnt.py
    import subprocess
     
    def run():
        print "start RUN"
        config = subprocess.Popen(["python", "config.py"], stdout=subprocess.PIPE)
        var = str(int(config.stdout.read()) * 99)
        print 'Entre les deux', var
        script = subprocess.Popen(["python", "script.py", var], stdout=subprocess.PIPE)
        print 'Au final:', script.stdout.read()

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 36
    Par défaut
    Citation Envoyé par PauseKawa Voir le message
    Bonjour,

    Pourquoi utiliser execfile ? Regardez l'exemple des pipes avec subprocess (17.1.3.2. Replacing shell pipeline).

    @+

    (Un code de 10 OOO lignes )
    Salut PauseKawa,

    Merci de ta réponse mais j'ai oublié de précisé quelque chose : j'utilise py2exe pour transformer en exe car le programme ne s'execute pas forcement sur un pc avec un environement python, donc imposible de faire un subprocess. De plus je souhaite faire un affichage en "temp reel" des print et non afficher tous les print à la fin du script.

    as tu une autre solution ?

    Merci
    Jean-Michel

  5. #5
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    Citation Envoyé par c_jm2 Voir le message
    j'utilise py2exe pour transformer en exe car le programme ne s'execute pas forcement sur un pc avec un environement python
    ? A tu tester ton code sur une machine sans Python ?

    Citation Envoyé par c_jm2 Voir le message
    as tu une autre solution ?
    Faire de FileMgnt un fichier texte qui contient le nom des scripts.
    Faire un readlines de FileMgnt dans l'IHM et mettre le résultat dans une liste.
    Lire la liste et faire un import des scripts pour les exécuter un à un.

    Avec cela fini les problèmes de variables globales.

    @+

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 36
    Par défaut
    J'ai trouvé une solution : les fonctions decorate.

    voici le code:
    script2.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #!/usr/bin/env python
    # _*_ coding: utf-8 _*_
     
    if __name__ == "__main__":
    	ma_var_1 = 123
     
    print "in Main ma_var_1 =",ma_var_1
     
    def addGlobalsFunction(glob=locals()):
    	def addGlobals(fct):
    		for key,value in glob.iteritems():
    			if key not in globals():
    				globals()[key]=value
    		return fct
    	return addGlobals
     
    @addGlobalsFunction()
    def MyFunction(var2):
    	print "in MyFunction ma_var_1 =",ma_var_1,var2
     
    MyFunction(123)
    ce code rajoute toutes les locals du "main" aux globals de la fonction
    pour cela il suffit de rajouter @addGlobalsFunction() juste avant le def de la fonction.

    Je ne sais pas si c'est très bien de faire ca mais ca fonctionne

    Merci a toi PauseKawa

    Jean-Michel

  7. #7
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    ? ... Dans la question du début tu voulais récupérer ma_var_1 de config.py dans script.py...
    Dans ton dernier code ma_var_1 et var2 sont dans le même script (script2.py) donc normal de pouvoir récupérer ma_var_1...
    J'ai louper un passage ?

    Pense à l'import

    @+

  8. #8
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    Ce n'est sans doute pas très propre mais voici pour ce qui est de py2exe et des imports dynamiques.

    IHM.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #!/usr/bin/env python
    # _*_ coding: utf-8 _*_
    #
    #
    import sys
    import os
    sys.path.append(os.getcwd())
     
    implist = []
    with open('FileMgnt', 'r') as fmgmt:
        for fichier in fmgmt.readlines():
            implist.append(fichier[:-1])
    funcundo = []
    for elem in implist:
        exec 'import ' + elem
        funcundo.append(elem)
        if hasattr(locals()[elem], 'run'):
            locals()[elem].run(globals()[funcundo[-2]])
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    #!/usr/bin/env python
    # _*_ coding: utf-8 _*_
    #
    #
    import sys
    import os
    sys.path.append(os.getcwd())
     
    funcundo = []
    with open('FileMgnt', 'r') as fmgmt:
        for elem in fmgmt.readlines():
            elem = elem[:-1]
            exec 'import ' + elem
            funcundo.append(elem)
            if hasattr(locals()[elem], 'run'):
                locals()[elem].run(globals()[funcundo[-2]])
    FileMgnt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    config
    script
    script1
    config.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/usr/bin/env python
    # _*_ coding: utf-8 _*_
    #
    #
    print ('in config.py set de ma_var_1')
    ma_var_1 = 123
    script.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #!/usr/bin/env python
    # _*_ coding: utf-8 _*_
    #
    #
    def run(func):
        print ('in script ma_var_1 =', func.ma_var_1)
        print ('Set new_var = ma_var_1 * 9')
        global new_var
        new_var = func.ma_var_1 * 9
    script1.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/usr/bin/env python
    # _*_ coding: utf-8 _*_
    #
    #
    def run(func):
        print ('new_var in script1 =', func.new_var)
    @+

    Edit: Pas testé sur un poste sans Python (cela existe ?)

  9. #9
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Salut,

    Tout cela m'a l'air bien obscur...
    Ce que j'ai compris c'est qu'on souhaite faire un import "dynamique" au sens ou les import 'normaux' se font plutôt dans les en-tête de modules et leur contexte est "bien défini"...

    Mais dynamique ou pas, si on veut ajouter les instructions d'un fichier à un module il faut bien pouvoir lui préciser "le contexte" car par défaut les globals et locals ne sont pas toujours ceux qu'on souhaite.

    Et donc, on peut les passer en paramètre.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  10. #10
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour wiztricks,

    Citation Envoyé par wiztricks Voir le message
    Mais dynamique ou pas, si on veut ajouter les instructions d'un fichier à un module il faut bien pouvoir lui préciser "le contexte" car par défaut les globals et locals ne sont pas toujours ceux qu'on souhaite.

    Et donc, on peut les passer en paramètre.
    C'est ce qui est fait... Je me suis loupé ou ?
    Une idée sur la question de c_jm2 ? Merci d'avance.

    @+

  11. #11
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Citation Envoyé par PauseKawa Voir le message
    C'est ce qui est fait... Je me suis loupé ou ?
    Une idée sur la question de c_jm2 ? Merci d'avance.
    Ce que je veux dire c'est: pas besoin d'écrire du code juste passer le globals souhaité à execfile ('toto.py', globals, locals) ou à l'exec ... in ...
    - W
    PS: Suis je clair? Ai-je ben compris le problème? Tel que tout cela est formulé je n'en suis même si sûr!
    Un peu de code, ou on met tous çà dans un seul script.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    # le code qui declare mavar
    config="""
    mavar = 123
    """
    # le code qui s'en sert
    code="""
    print 'code: mavar:', mavar
    def f():
        print 'code, f: mavar:', mavar
    f()
    """
    # on charge avec debrouille toi pour globals()
    def sans_globals():
        exec config 
        exec code 
    print 'no globals'
    try:
        sans_globals()
    except NameError: # c'est l'erreur attendue
        print 'pas de global pas de myvar'
     
    def with_globals():
        g = {} # au début globals est "vide", il aurait pu être le globals()
        exec config in g # ca met mavar dans g
        exec code in g  # et on partage le meme g...
    print 'globals set'
    with_globals()
    La sortie est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    no globals
    code: mavar: 123
    code, f: mavar: pas de global pas de myvar 
    globals set
    code: mavar: 123
    code, f: mavar: 123
    Ca reproduit bien le "problème": le print mavar plante dans f alors qu'il marche dans 'code'.
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  12. #12
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    Ce qui donne pour c_jm2 (pour le premier code donné) :

    FileMgnt.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #!/usr/bin/env python
    # _*_ coding: utf-8 _*_
    #
    #
    def run():
        print "start RUN"
        g = {}
        exec readfile('config.py') in g
        exec readfile('script.py') in g
     
    def readfile(fname):
        with open(fname, 'r') as f:
            return f.read()
    C'est quand même plus clair et l'utilisation d'un dico limite les erreurs possibles...

    Merci wiztricks

    Edit : En fait c'est le in avec exec qui me manquait... Double merci

  13. #13
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    De rien...

    Mais sauf si tu es sous Python3 - qui a viré execfile - çà pourrait donner:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #
    def run():
        print "start RUN"
        g = {}
        execfile ('config.py', g)
        execfile ('script.py', g)
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  14. #14
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Mais sauf si tu es sous Python3 - qui a viré execfile
    - W
    Ou (pour faire mumuse) et en modifiant les print des scripts.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #!/usr/bin/env python
    # _*_ coding: utf-8 _*_
    #
    #
    import sys
     
    if sys.version_info[0] == 3:
        def readfile(fname):
            with open(fname, 'r') as f:
                return f.read()
     
        def execfile(f, g):
            exec(readfile(f), g)
     
    def run():
        print("start RUN")
        g = {}
        execfile('config.py', g)
        execfile('script.py', g)
    @+

    Edit: Plus court (pas bien le copier/coller)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import sys
     
    if sys.version_info[0] == 3:
        def execfile(f, g):
            with open(f, 'r') as f:
                exec(f.read(), g)
     
    def run():
        print("start RUN")
        g = {}
        execfile('config.py', g)
        execfile('script.py', g)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Variable globale / Propriété des threads
    Par rgarnier dans le forum XMLRAD
    Réponses: 4
    Dernier message: 03/10/2003, 10h49
  2. Cacher Variable Url avec Variable Globale
    Par danuz dans le forum XMLRAD
    Réponses: 6
    Dernier message: 26/09/2003, 17h20
  3. Variable "globale" (dans plusieurs templa
    Par mattmat dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 17/06/2003, 19h22
  4. question sur les variables globales et les thread posix
    Par souris_sonic dans le forum POSIX
    Réponses: 5
    Dernier message: 13/06/2003, 13h59
  5. les variables globales static
    Par gRRosminet dans le forum C
    Réponses: 8
    Dernier message: 27/04/2002, 08h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo