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

  FORUM HardWare.fr
  Programmation
  C

  un peu perdu avec les storage class du C en revenant de java

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

un peu perdu avec les storage class du C en revenant de java

n°2121017
TheRom_S
Posté le 12-01-2012 à 15:07:36  profilanswer
 

Salut, ça faisait bien longtemps que j'étais pas passé sur ce forum (nostalgie). Voici mon souci.
 
Je suis en train de programmer en C pour un microcontroleur de la famille PIC18 (avec le compilateur MCC18) et je n'avais plus fait de C depuis assez longtemps. Je suis beaucoup plus à l'aise avec java ou l'assembler directement. Et je me perd un peu avec les déclaration de variables static et extern ainsi que leur portée, suivant où elles sont déclarées. Je suis à l'aise avec les pointeurs, mais pas forcément avec les typedef union et struct.
 
Pour m'y retrouver, j'essaie de séparer mon code source en différents fichiers, de manière vaguement équivalente à ce que j'aurais fait sous java. Je me retrouve avec un .h et un .c par "objet" (si vous me permettez l'abus de langage). Et voici ce que je fais pour l'instant pour tenter d'avoir l'équivalent de variables public / private.

Code :
  1. // java
  2. public static int i; // attribut de classe
  3. // C
  4. // .h
  5. extern int i;
  6. // .c (au minimum dans un seul .c mais n'importe lequel qui utilisera la viariable j'ai l'impression, ce qui me perturbe)
  7. int i;
Code :
  1. //java
  2. private static int i; // attribut de classe
  3. // C
  4. // .c (uniquement dans "l'objet" qui l'utilise, c'est pas vraiment private mais la variable reste inaccessible pour le reste du programme)
  5. static int i;

Jusque là, la correspondance entre java et C est-elle correcte ? Je ne connaissais pas "extern". Quelle est la portée exacte de la variable ?
 
Ensuite, comment devrait-on faire pour les attributs non statiques ? Voici à quoi je pense

Code :
  1. // java
  2. public int a,b; // attributs public
  3. // C
  4. // .h
  5. typedef struct {
  6.     int a;
  7.     int b;
  8. } objet;
  9. // .c (n'importe lequel qui utilise l'objet, du moment que ob est passé comme argument de fonction)
  10. // pour un attribut private, le typedef serait aussi dans le .c, avec les mêmes remarque que précédemment
  11. objet ob;
  12. ...
  13. ob.a = 0;
  14. f(ob); // etc ...

Ici, ob est-il en fait un pointeur ?
Si j'ai

Code :
  1. objet obStack[10];
  2. objet ob;
  3. int i,j;
  4. ...
  5. ob = obStack[i];
  6. obStack[j] = ob;

Je n'ai pas de certitudes sur le fonctionnement des 2 dernières lignes. Si ob et obStack[i] sont des pointeurs (avec l'indice pour obStack), la dernière serait particulièrement dangereuse. Mes tests ont eu des comportements différents à plusieurs reprises et je n'ai pas encore regardé le détail du code une fois compilé car mes outils ne montrent pas facilement l'association entre variables et leur emplacement en RAM et comme le code gère de l'USB au timing délicat, un debugging en profondeur pour repérage n'ira pas jusque là. Il faut que je prépare un test plus simple pour regarder ça ...
 
Bref, les correspondances que j'ai décrit sont-elles correctes ? Dans ces cas, quelle est la portée des variables (c'est généralement ça qui me pose souci je crois) ? Bref, si quelqu'un pouvait m'aider à me remettre les idées en place, je lui offre toute ma gratitude (jeu-concours sans obligation d'achat).
 
Merci d'avance !

mood
Publicité
Posté le 12-01-2012 à 15:07:36  profilanswer
 


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

  un peu perdu avec les storage class du C en revenant de java

 

Sujets relatifs
[C]Ne trouve pas le fichier Delays.h[C] MLX: Acceder aux différents octets d'un unsigned long
Dans votre job, est ce que vous appliquez des "concepts" du C++ ?[C] Swaper les maillons d'une liste chainees ! Help
[C] problème de fichierspouvez vous m'aidez a crée un programme en C
Exécution d'une commande Dos dans un programme Java[C] souligné
mastermind en Caide rémuniré dans un projer de C++ pr une etudiante en 1 ere année
Plus de sujets relatifs à : un peu perdu avec les storage class du C en revenant de java


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