Forum Heroes' Chronicles


Nous sommes actuellement le Dim 28 Avr, 2024 22:00

Heures au format UTC + 1 heure





Publier un nouveau sujet Répondre au sujet  [ 10 messages ] 
Auteur Message
 Sujet du message: Un petit problème de programmation.
MessagePublié: Lun 10 Mars, 2008 17:55 
Hors-ligne
Héros Légendaire
Avatar de l’utilisateur
 Site Internet  Profil

Inscrit le: Jeu 08 Sep, 2005 10:49
Messages: 1587
Peut-etre certains d'entre vous pourront m'aider :)

J'ai réaliser un petit code tout bète :

-------------------------------------------------------------------------------------------------------------

#include <stdio.h>
#include <stdlib.h>

void copie(long tableauOriginal[], long tableauCopie[], long tailleTableau);

int main()
{
long tableauOriginal[4], i=0, tableauCopie[4];
static long j=0;

tableauOriginal[0] = 10;
tableauOriginal[1] = 11;
tableauOriginal[2] = 13;
tableauOriginal[3] = 14;

tableauCopie[0] = 0;
tableauCopie[1] = 0;
tableauCopie[2] = 0;
tableauCopie[3] = 0;

copie( tableauOriginal, tableauCopie, 4);

for (i=0; i<4; i++)
printf("%ld", tableauCopie[i]);

return 0;
}

void copie(long tableauOriginal[], long tableauCopie[], long tailleTableau)
{
for(j=0; j<tailleTableau; j++)
tableauCopie[j]=tableauOriginal[j];
}

-------------------------------------------------------------------------------------------------------------

Voila, il est donc composé de deux fonction, la fonction main, et la fonction copie. Dans la fonction copie, j'utilise la variable "j", que j'ai définie dans la fonction main. Je sais bien qu'une variable disparait a la fin de la fonction, mais le "static" ne devrais pas résoudre ce problème en rendant la variable j ( devenue globale ) accessible a toutes les fonctions du fichier ??

Apparement non, puisque j'ai cette erreur :

ligne 31 : error : 'j' undeclared ( first use in this fonction)
ligne 31 : error : ( each undeclared identifier is reported only once
ligne 31 : error : for each fonction it appears in )

J'aurais aimer savoir pourquoi.

Peut-etre que je me trompe dans l'utilisation du "static"...

Merci de votre aide :)

_________________
[img]http://img35.imageshack.us/img35/7818/monstrosign2.png[/img]


Haut
 

 Sujet du message:
MessagePublié: Lun 10 Mars, 2008 18:01 
Hors-ligne
Héros Mythique
Avatar de l’utilisateur
 Profil

Inscrit le: Mar 26 Avr, 2005 13:53
Messages: 754
Localisation: Nains
Et pourquoi tu declare pas ta variable j dans la fonction copie ?

C'est plus propre de toute façon .

_________________
Trosken , ex [NAINS] , nouvel [Avalon] !


Haut
 

 Sujet du message:
MessagePublié: Lun 10 Mars, 2008 18:04 
Hors-ligne
Héros Légendaire
Avatar de l’utilisateur
 Site Internet  Profil

Inscrit le: Jeu 08 Sep, 2005 10:49
Messages: 1587
Ouais ouais, j'y ai pensé, je peut aussi la déclarer au tout début de mon code après les directives de préprocesseur, mais c'était juste pour savoir pourquoi ca buggait...

_________________
[img]http://img35.imageshack.us/img35/7818/monstrosign2.png[/img]


Haut
 

 Sujet du message:
MessagePublié: Lun 10 Mars, 2008 18:54 
Hors-ligne
Héros Important
Avatar de l’utilisateur
 Profil

Inscrit le: Mar 08 Août, 2006 20:46
Messages: 116
Pour l'utilisation du static il faut que tu déclares ta variable en dehors de toutes fonctions

_________________
Image
Image


Haut
 

 Sujet du message:
MessagePublié: Lun 10 Mars, 2008 19:15 
Hors-ligne
Héros Légendaire
Avatar de l’utilisateur
 Site Internet  Profil

Inscrit le: Jeu 08 Sep, 2005 10:49
Messages: 1587
Ah bon ?

Pourtant, lorsque je déclare la varialbe en dehors des fonctions, je ne met spas de static, et ca marche très bien !

Le static serait inutile ?

_________________
[img]http://img35.imageshack.us/img35/7818/monstrosign2.png[/img]


Haut
 

 Sujet du message:
MessagePublié: Lun 10 Mars, 2008 20:28 
Hors-ligne
Héros Important
Avatar de l’utilisateur
 Profil

Inscrit le: Mar 08 Août, 2006 20:46
Messages: 116
Il me semble que le static n'est utile que lorque tu utilises des classes: alors il sert à rendre une variable ou une fonction totalement indépendante des instances crées de ta classe.
En gros il permet au lieu d'avoir une valeur d'une variable pour chacune des instances de ta classe d'avoir une unique valeur (modifiable) pour toutes les instances de la classe (ce qui peut être utile si tu dois compter le nombre d'instance de ta classe ou encore utiliser un getSingleton() ).

Exemple:
Code:
class maClasse
{
static public int maVariableStatic = 0;

public int maVariable2 = 0;
}

void main()
{
maClasse instance1();
maClasse instance2();

instance1.maVariable2 = 5;
instance1.maVariableStatic = 10;

/* dans ce cas:
instance2.maVariable2 == 0
mais
instance2.maVariableStatic == 10;*/

_________________
Image
Image


Haut
 

 Sujet du message:
MessagePublié: Lun 10 Mars, 2008 21:30 
Hors-ligne
Héros Légendaire
Avatar de l’utilisateur
 Site Internet  Profil

Inscrit le: Jeu 08 Sep, 2005 10:49
Messages: 1587
Okay merci beaucoup :)

_________________
[img]http://img35.imageshack.us/img35/7818/monstrosign2.png[/img]


Haut
 

 Sujet du message:
MessagePublié: Lun 10 Mars, 2008 22:05 
Hors-ligne
Héros Administrateur !
Avatar de l’utilisateur
 Profil

Inscrit le: Ven 09 Juil, 2004 11:15
Messages: 6463
voilà, le j servait à rien puisque tu avais un "i" dans le main ...
A noter que ça sert à rien d'initialiser i à 0.
Code:
#include <stdio.h>
#include <stdlib.h>

void copie(long tableauOriginal[], long tableauCopie[], long tailleTableau){
   int j;
   for(j=0; j<tailleTableau; j++)
   tableauCopie[j]=tableauOriginal[j];
}

int main(){
   long tableauOriginal[4], i=0, tableauCopie[4];

   tableauOriginal[0] = 10;
   tableauOriginal[1] = 11;
   tableauOriginal[2] = 13;
   tableauOriginal[3] = 14;

   tableauCopie[0] = 0;
   tableauCopie[1] = 0;
   tableauCopie[2] = 0;
   tableauCopie[3] = 0;

   copie( tableauOriginal, tableauCopie, 4);

   for (i=0; i<4; i++)printf("%ld \n", tableauCopie[i]);
    system("pause");
    return 0;
}


Néanmoins, si tu veux utiliser un j commun pour tes boucles for:

Code:
#include <stdio.h>
#include <stdlib.h>

int j;
   
void copie(long tableauOriginal[], long tableauCopie[], long tailleTableau){
   for(j=0; j<tailleTableau; j++)
   tableauCopie[j]=tableauOriginal[j];
}

int main(){
   long tableauOriginal[4], tableauCopie[4];

   tableauOriginal[0] = 10;
   tableauOriginal[1] = 11;
   tableauOriginal[2] = 13;
   tableauOriginal[3] = 14;

   tableauCopie[0] = 0;
   tableauCopie[1] = 0;
   tableauCopie[2] = 0;
   tableauCopie[3] = 0;

   copie( tableauOriginal, tableauCopie, 4);

   for (j=0; j<4; j++)printf("%ld \n", tableauCopie[j]);
    system("pause");
    return 0;
}


enfin

Code:
#include <stdio.h>
#include <stdlib.h>

int j; // globale au cas où...
   
void copie(long tableauOriginal[], long tableauCopie[]){
   for(j=0; j<sizeof(tableauOriginal); j++){           
       tableauCopie[j]=tableauOriginal[j];
       printf("%ld \n", tableauCopie[j]);
     }   
}

int main(){
   long tableauOriginal[4]={10,11,13,14}, tableauCopie[4];
   copie(tableauOriginal, tableauCopie);
    system("pause");
    return 0;
}


Haut
 

 Sujet du message:
MessagePublié: Lun 10 Mars, 2008 22:35 
Hors-ligne
Charogneur de niveaux 42
Avatar de l’utilisateur
 Site Internet  Profil

Inscrit le: Mer 24 Nov, 2004 19:06
Messages: 8891
Localisation: joue à la balle
sinon pour la réponse sur le static cela permet de donner à une variable locale une durée de vie permanente

(là ca sert a rien dans le main vu que la fin du main donne normalement la fin du programme)

mais par exemple si t'as une fonction
Code:
int func()
{
static int Val_perm=0;
return Val_perm++;
}


si t'appelle 4 fois cette fonction elle va retourner 0, 1,2,3

la valeur de la variable locale n'est pas réinitialisé entre chaque appel à la fonction.

_________________
°
*͌l* ̴ı̴̴ ͡|̲̲̲͡͡͡ ̲▫̲͡ ̲̲̲͡͡π̲̲͡͡ ̲̲͡▫̲̲͡͡ ̲| ̴ı̴ *͌l*


Haut
 

 Sujet du message:
MessagePublié: Mar 11 Mars, 2008 8:25 
Hors-ligne
Héros Légendaire
Avatar de l’utilisateur
 Site Internet  Profil

Inscrit le: Jeu 08 Sep, 2005 10:49
Messages: 1587
Okay merci j'y vois un peu plus clair :p

C'était assez brouillon dans ma tête.

Bon plus qu'a m'entrainer maintenant.

_________________
[img]http://img35.imageshack.us/img35/7818/monstrosign2.png[/img]


Haut
 

Afficher les messages publiés depuis:  Trier par  
Publier un nouveau sujet Répondre au sujet  [ 10 messages ] 

Heures au format UTC + 1 heure



Qui est en ligne ?

Utilisateur(s) parcourant actuellement ce forum : Aucun utilisateur inscrit et 27 invité(s)


Vous ne pouvez pas publier de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum

Rechercher pour:
Aller vers:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group  
Design By Poker Bandits     
Updated By Kieron Thwaites (Ron2K)  
Traduction réalisée par Maël Soucaze © 2010 phpBB.fr