Ma compréhension du type de promotion des arguments de fonction en C, est que, si j'appelle une fonction non prototypée avec un argument de type char
ou short
, il sera promu à un int
.
Question: Que faire si je l'appelle avec un long
comme argument, et sizeof(long) > sizeof(int)
?Type de promotion en C, Passant un long comme un argument
Si le paramètre est passé comme long
, pourquoi ne pas choisir long
comme type auquel tous les paramètres intégraux doivent être promus? n'est pas la raison derrière le type de promotion des arguments, c'est de rendre les compilateurs plus simples à écrire, en rendant les paramètres poussés sur la pile de même longueur, de sorte que le système d'exécution n'a besoin que de connaître le nombre de paramètres avec leurs tailles?
"si j'appelle une fonction non prototypée" Do not. Ce n'est pas ce que le type de promotion est ou est pour. Dans ce cas, le compilateur doit deviner et ne peut pas mieux deviner que "probablement int" pour tout paramètre que vous donnez. D'autre part, la promotion de type est utilisée lors du traitement d'opérations (par exemple "+", "-", ....) sur plus d'un opérande de types connus mais différents, où l'un est "plus petit" que l'autre. Le plus petit est promu au type des autres. Si vous appelez une fonction prototypée (avec un type de paramètre connu), vous pouvez obtenir la promotion de type, si le paramètre est de type "plus petit". – Yunnosch
@Yunnosch "ne peut pas deviner mieux que" probablement int "", en fait il peut deviner "double" en cas de flottement. –
"n'est pas la raison derrière le type de promotion des arguments, est de rendre les compilateurs plus simples à écrire" -> les promotions doivent amener les types étroits jusqu'au type "natif" (plus ou moins) entier pour le processeur plus léger/plus rapide code. – chux