Supposons que le int
est le type 16 bits pour empêcher la conversion implicite de short
.Comment forcer la promotion d'entier en C pour l'expression long = court + court
long test_1(short x, short y)
{
return x + y;
}
- Quelles sont les règles C sur la promotion de chiffres dans cet exemple?
- Comment se protéger de l'arithmétique modulo?
J'ai testé le premier code d'OP dans MSVC avec 'test_1 (32767, 32767);' et il a renvoyé le résultat correct '65534'. Bien que "short" ne doive être * au moins * 16 bits, il est * dans * mon compilateur. –
@WeatherVane Quelle est l'ABI de MSVC? – Michas
@Michas AFAIK les types entiers plus petits que 'int' sont promus' int' avant le calcul. S'il vous plaît [voir la réponse acceptée] (http://stackoverflow.com/questions/24371868/why-must-a-short-be-converted-to-an-int-before-arithmetic-operations-in-c-and-c) est le meilleur que je peux trouver à court terme. –