Pourquoi l’opérateur modulus (%) fonctionne-t-il pour les types char mais pas pour les types flottants?

#include  int main() { char c; c=10; if(c%2==0) printf("Yes"); return 0; } 

Le code ci-dessus imprime “Oui”. Quelqu’un peut-il dire pourquoi l’opérateur de module fonctionne pour char et int mais pas pour double etc.?

Vous avez déjà des commentaires expliquant pourquoi % est défini pour char : il est défini pour tous les types d’entiers, et en C, char est un type entier. D’autres langages définissent un type de caractère distinct qui ne prend pas en charge les opérations arithmétiques, mais C n’en fait pas partie.

Mais pour répondre pourquoi il n’est pas défini pour les types à virgule flottante: historique. Il n’y a pas de raison technique pour laquelle il ne serait pas possible de définir l’opérateur % pour les types à virgule flottante. Voici ce que dit le raisonnement C99:

6.5.5 Opérateurs multiplicatifs

[…]

Le Comité C89 a rejeté l’extension de l’opérateur % aux travaux sur les types flottants, car une telle utilisation ferait double emploi avec la fonctionnalité fournie par fmod (voir le §7.12.10.1).

Et comme mafso retrouvé plus tard:

7.12.10.1 Les fonctions fmod

[…]

Le Comité C89 a examiné une proposition visant à utiliser le rest opérateur % pour cette fonction; mais il a été rejeté car les opérateurs correspondent généralement à des équipements matériels, et fmod n’est pas pris en charge dans le matériel de la plupart des machines.

Ils semblent un peu contradictoires. L’opérateur % n’a pas été prolongé parce que fmod déjà fmod ce besoin, mais fmod été choisi pour répondre à ce besoin car le comité ne souhaitait pas étendre l’opérateur % ? Ils ne peuvent pas très bien être tous les deux vrais en même temps.

Je soupçonne que l’une de ces raisons était la raison initiale, et l’autre était la raison pour laquelle elle ne reverrait pas cette décision plus tard, mais rien ne dit qui était le premier. Quoi qu’il en soit, il a simplement été décidé que % n’effectuerait pas cette opération.