Je devine que la macro C_ASSERT
est défini comme ceci:
#define C_ASSERT(x) typedef char C_ASSERT_ ## __COUNTER__ [(x) ? 1 : -1];
C'est une affirmation de la compilation: si l'expression compilation x
est vrai, cela se développe à quelque chose comme
typedef char C_ASSERT_1[1];
qui déclare le nomtype C_ASSERT_1
être un alias pour le type char[1]
(gamme de 1 char
). Converely, si l'expression x
est fausse, il se développe à
typedef char C_ASSERT_1[-1];
qui est une erreur de compilation, puisque vous ne pouvez pas avoir un type de tableau de taille négative.
Par conséquent, votre problème est que l'expression sizeof(somestruct) == some#define
est false, c'est-à-dire que la taille de somestruct
N'EST PAS ce que votre code attend. Vous devez corriger cela - soit changer la taille de somestruct
, soit changer la valeur de some#define
, en vous assurant que cela ne casse rien.
Qu'est-ce que # define exactement? – Mark
Qu'est-ce que 'C_ASSERT'? S'il s'agit d'une affirmation statique, cette erreur indiquerait simplement un échec d'assertion. C'est une manière relativement courante d'implémenter l'assertion statique, ce qui entraîne une erreur d'indice négatif si la condition donne faux. – jalf