Directives du préprocesseur
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:
Citation:
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 décide néanmoins de tester ça avec le bout de code suivant:
Code:
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 m'attend à recevoir un message me disant que ma directive n'es pas correcte mais, à ma grande surprise, pas un seul message d'erreur.
Je change donc le code en
Code:
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
... |
... et ma compilation m'affiche:
Citation:
Fatal xxxx Error directive: Invalide size for btext in function ...
Cela génère également une erreur si, pour le premier exemple, l'indice est <> 4
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... :P
Edgar.