通过指针访问指向具有不同参数列表的函数的指针是否合法void (*f)()?下面的程序使用 gcc 编译时没有警告,并且似乎运行正确,但它是合法的 C 吗?
#include <stdio.h>
#include <stdlib.h>
typedef void funp();
static void funcall( funp* F, int args, double x)
{
switch( args)
{
case 0: F(); break;
case 1: F(x); break;
}
}
static void fun0( void)
{
printf( "zero\n");
}
static void fun1( double x)
{
printf( "one\t%f\n", x);
}
int main( )
{
funcall( (funp*)fun0, 0, 17.0);
funcall( (funp*)fun1, 1, 17.0);
return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
我编译了这个
gcc -Wpedantic -Wall -Wextra -std=gnu11 -O2 -o ./funp …Run Code Online (Sandbox Code Playgroud)