Bonjour,
D'abord, chose important je pense, j'utilise Cbuilder6
Je recherchais sur le net les différentes directives que l'on peut utiliser avec le préprocesseur, car je voulais éviter un éventuel plantage de mon programme qui aurait eu lieu suite à une erreur de dimensionement d'un tableau.
Sur ce site, je trouve cette information, ainsi qu'une similitude sur le site MSDN:
Je décide néanmoins de tester ça avec le bout de code suivant:The constant-expression is an integer constant expression with these additional restrictions:
Expressions must have integral type and can include only integer constants, character constants, and the defined operator.
The expression cannot use sizeof or a type-cast operator.
Je m'attend à recevoir un message me disant que ma directive n'es pas correcte mais, à ma grande surprise, pas un seul message d'erreur.
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 typedef struct { SDL_Surface *button; SDL_Rect coo; int alpha; } s_button; s_button button[4]; void fct(....) { char *btext[]={"Sélection des folders","Folder sélectionnés","Générer les archives","Quitter"}; #if sizeof(btext)/sizeof(char *)!=sizeof(button)/sizeof(s_button) #error Invalid size for btext #endif ...
Je change donc le code en
... et ma compilation m'affiche:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 void fct(...) { char *btext[]={"Sélection des folders","Folder sélectionnés","Générer les archives","Quitter","blabla"}; #if sizeof(btext)/sizeof(char *)!=sizeof(button)/sizeof(s_button) #error Invalid size for btext #endif ...
Cela génère également une erreur si, pour le premier exemple, l'indice est <> 4Fatal xxxx Error directive: Invalide size for btext in function ...
Ma question est donc: le traitement des sizeof par le préprocesseur est-il spécifique à Cbuilder6, ou les préprocesseurs ont-il été modifiés depuis que les articles ont été postés sur le net?
Remarque: personnellement, ça m'arrange bien, vu ma grande distraction...
Edgar.
Partager