Bonjour
J'aimerais me debrouiller avec les types moi-meme pour mon programme (un compilateur), alors je trouve que C me met des batons dans les roues. En gros je veux avoir une zone memoire reservee sur le tas, et dedans je vais mettre des entiers, des caracteres etc. ou bien des pointeurs vers une zone d'allocation pour les types qui sont trop grands.
Voila ce a quoi je suis arrive:
Alors ca marche bien, mais le code ci-dessus me donne un warning que les donnees ne sont pas la meme taille:
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 // Declare la zone d'allocation #define INIT static void* buf[MYSTACKSIZE]; static void** stack = buf; // Place un "objet" dans la zone d'allocation #define STORO(type, ofs, val) (stack[ofs] = *(void**)&((type)val)) // Place un pointeur dans la zone d'allocation #define STOR(ofs, val) (stack[ofs] = (void*)val) // Lis une variable #define READ(type, ofs) (*(type*)(stack+ofs)) int main(int argc, char* args[]) { INIT short k = 36; STOR(0, k); printf("%d\n", READ(short, 0)); return 0; }
La solution que j'ai c'est d'utiliser le mysterieux "STORO" que j'ai defini plus haut, comme ca:
Code : Sélectionner tout - Visualiser dans une fenêtre à part HelloWorld.c:49: warning: cast to pointer from integer of different size
Est-ce que c'est la bonne solution? Y a-t-il quelque chose de plus simple? Ou bien j'accepte simplement les warnings et j'oublie STORO?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 typedef struct { short value; } Short; ... STORO(Short, 0, {k}); printf("%d\n", READ(short, 0)); ...
Partager