Bonjour,
En étudiant le cours je tombe sur la notion de promotion des arguments. J’avoue que j’ai un peu de mal. Il me semble que le cours dit que si je passe un argument de type short à un pointeur de fonction "générique", celui-ci sera converti en int et donc dans le corps de la fonction, on aura un int même si la fonction attendait un short.
C’est à dire que dans le code ci-dessous je m’attendais à un retour de 4 mais le retour affiche bien 2. Donc l’argument a bien été converti en short ? Mais comment, du coup ?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void foo(short a)
{
printf("sizeof(param) : %zu\n", sizeof a);
}
int main()
{
void (*pf) ();
pf = &foo;
int a = 0;
pf(a);
return 0;
}
retour :
sizeof(param) : 2
De plus, je ne comprends pas pourquoi mon compilateur me donne le warning suivant alors qu’il me semble bien respecter les syntaxes théoriques pour un "pointeur générique de fonction" :
warning: assignment from incompatible pointer type [-Wincompatible-pointer-types]
pf = &foo;
^
+0
-0