Les pointeurs à deux fonctions n'ont pas la même signature, car les paramètres d'entrée sont différents.
Les pointeurs de fonction à la fois un retour int, tandis que g accepte un int comme entrée, et h accepte une carbonisation en tant que paramètres d'entrée.
Bien que vous pouvez parfois mélanger int et ombles, vous mélangez des pointeurs de fonction, de sorte que le compilateur vous donne correctement un avertissement que vous pourriez faire quelque chose de mal.
code Exemple:
#include <stdio.h>
int gf(int n)
{
return printf("gf(%d)\n", n);
}
int hf(char c)
{
return printf("hf('%c')\n", c);
}
int main()
{
int (*g)(int) = gf; // pointer to gf
int (*h)(char) = hf; // pointer to hf
g = h; // warning: possibly incompatible functions
g(65); // cast 65 to char and call h
return 0;
}
Compiling:
$ gcc-4.exe -Wall a.c
a.c: In function 'main':
a.c:18: warning: assignment from incompatible pointer type
programme en cours:
$ ./a.exe
hf('A')
Comme vous le voyez, en C, cela fonctionne bien, mais le compilateur vous donne un avertissement approprié.Si nous essayons de le compiler comme le code C, le compilateur n'acceptera notre pointeur jonglerie:
$ g++-4.exe a.c
a.c: In function 'int main()':
a.c:18: error: invalid conversion from 'int (*)(char)' to 'int (*)(int)'
-t-il pas dit là dans le message d'avertissement quel est le problème? Les pointeurs pointent vers différents types .. :) – falstro
+1 pour démontrer ce qu'est un « avertissement » signifie en C. –
Je cherche réponse sur la façon dont fonctionne traducteur quand un rétrécissement implicite de int à carboniser. – root