function cast leads to gcc abort command

Viewed 792

in the following code in file 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;
}

i tried to cast an int(int,int) function into an int(int) function an got the gcc warning and note:

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

and when trying to run i get:

Illegal instruction (core dumped)

but if i compile this file with a .cpp ending with the gcc compiler it works OK. can anyone explain the problem of the compiler in the .c case?

3 Answers
Related