J'utilise une grande structure avec beaucoup de membres, et je voudrais un moyen facile de voir rapidement si l'un des membres est différent de zéro. Je sais que memcmp()
ne devrait pas être utilisé pour comparer deux structures pour l'égalité (comme expliqué ici: How do you compare structs for equality in C?), mais j'espère qu'en comparant une structure à un bloc de mémoire qui a été mis à 0, cela peut fonctionner.Puis-je utiliser memcmp pour vérifier la structure pour les membres non nuls?
Par exemple, supposons que j'ai quelques struct:
typedef struct {
int Int1;
int Int2;
int Int3;
} MyInts;
Je crée une variable de cette structure:
MyInts MyStruct = {0};
Tout au long de l'exécution de mon programme, les membres de MyStruct
seront généralement 0, mais peut parfois être mis à une valeur non nulle temporairement. Je veux vérifier rapidement si l'un des nombres de MyStruct
est différent de zéro. Puis-je utiliser memcmp()
comme ci-dessous?
// Create empty struct to test against
MyInts EmptyStruct = {0};
// Make sure entire memory block of test struct is cleared
memset(&EmptyStruct, 0, sizeof(MyInts));
// Compare MyStruct to EmptyStruct to see if any non-zero members exist
int result = memcmp(&MyStruct, &EmptyStruct, sizeof(MyInts));
Remarque: 'double fn = -0,0; fp = 0.0; '->' fn == fp', les deux sont égaux à zéro. Pourtant 'memcmp (& fp, & fn, sizeof fp)' signale la différence. – chux
Ne pas thnk 'MyInts EmptyStruct = {0};' est spécifié pour initialiser le remplissage à zéro bits. – chux
@chux il est garanti de régler le remplissage à zéro bits, voir C11 6.7.9/10 (et/21 qui se réfère à/10) –