в следующем коде в файле func.c:
#include <stdio.h>
int Myfunc1(int i, int z)
{
return i;
}
int main()
{
int ans;
/* casting the function into an 'int (int)' function */
ans = ((int(*)(int))(Myfunc1))(5);
printf("ans: %d\n\n", ans);
return 0;
}
я попытался преобразовать функцию int (int, int) в функцию int (int) и получил предупреждение gcc и примечание:
func.c:13:32: warning: function called through a non-compatible type [enabled by default]
func.c:13:32: note: if this code is reached, the program will abort
и при попытке запустить я получаю:
Illegal instruction (core dumped)
но если я скомпилирую этот файл с расширением .cpp, заканчивающимся компилятором gcc, он будет работать нормально. кто-нибудь может объяснить проблему компилятора в случае .c?
int(int, int)
в функциюint(int)
. Почему? Вы определенно не должны этого делать. Как в C, так и в C++ не определен вызов функции через указатель на несовместимый тип. - person   schedule 18.12.2013