小编dmu*_*uir的帖子

对其他函数使用 void (*)() 指针

通过指针访问指向具有不同参数列表的函数的指针是否合法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)

c pointers function language-lawyer

33
推荐指数
3
解决办法
1521
查看次数

标签 统计

c ×1

function ×1

language-lawyer ×1

pointers ×1