硬邦邦 发表于 2014-3-9 21:22:37

请教:结构体中包含带参数的函数是如何把参数传进来的

本帖最后由 硬邦邦 于 2014-3-9 21:27 编辑

今天分析VIVI程序:结构体中包含带参数的函数,不知参数是如何传进来的。

typedef struct user_command {
        const char *name;
        void (*cmdfunc)(int argc, const char **);
        struct user_command *next_cmd;
        const char *helpstr;
} user_command_t;

void command_flash(int argc, const char **argv)
{
        if (mymtd == NULL) {
                printk("Error: Can not find MTD information\n");
                return;
        }

        if (argc == 1) {
                printk("invalid 'flash' command: too few arguments\n");
                command_help(0, NULL);
                return;
        }
        execsubcmd(flash_cmds, argc-1, argv+1);
}

static user_command_t flash_cmd = {
        "flash",
        command_flash,
        NULL,
        "flash [{cmds}] \t\t\t-- Manage Flash memory"
};

add_command(&flash_cmd);

security 发表于 2014-3-9 21:52:46

这是一个函数指针,作为结构体的一个成员变量,在这边结构体对象定义时,只需知道函数的地址,在后面调用时,会掉用此函数指针,此时就会传人实际的参数。

硬邦邦 发表于 2014-3-9 21:57:42

谢谢你的回复,你说的还是太深奥了,没理解明白

security 发表于 2014-3-9 22:07:12

你用source insight搜索下cmdfunc关键字,应该就可以看到类似cmdfunc(argc,argv)的代码,这边就是实际调用的部分,此时就有传人参数了。而之前仅仅是定义变量,将command_flash这个函数的地址赋值给cmdfunc变量。这样后面调用cmdfunc时,就相当于调用command_flash。

硬邦邦 发表于 2014-3-9 22:18:14

非常感谢看明白了。

huangxiaowei 发表于 2014-4-16 14:33:16

   顶一下
页: [1]
查看完整版本: 请教:结构体中包含带参数的函数是如何把参数传进来的