в следния код във файл 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