参数计数正确时,函数参数太少

时间:2014-08-17 17:55:55

标签: c linux linux-kernel kernel

一年前有一个这样的问题,但从未得到过回答。我没有在旧线程上提出新问题,而是打开一个新问题。无论如何,关于这个问题。

在为Linux编译Zen内核时,我在make-kpkg内核源代码时遇到了这个错误:

arch/x86/platform/intel-mid/early_printk_intel_mid.c: In function ‘dw_kmsg_dump’:
arch/x86/platform/intel-mid/early_printk_intel_mid.c:121:3: error: too few arguments to function ‘early_mrst_console.write’
   early_mrst_console.write(&early_mrst_console, line, len);

这里是early_mrst_console.write的代码(early_mrst_console是struct顺便说一句,其early_mrst_spi_write函数的函数write的链接:< / p>

static void early_mrst_spi_write(struct console *con, const char *str,
                    unsigned n)
{
    int i;

    for (i = 0; i < n && *str; i++) {
        if (*str == '\n')
            early_mrst_spi_putc('\r');
        early_mrst_spi_putc(*str);
        str++;
    }
}

现在,我不是C专家(甚至不是业余爱好者),但看起来early_mrst_spi_write需要3个参数,而对它的调用会产生3个参数。为什么它会调用错误,如何更改它以解决问题?

编辑:根据请求,struct

struct console early_mrst_console = {
    .name =     "earlymrst",
    .write =    early_mrst_spi_write,
    .flags =    CON_PRINTBUFFER,
    .index =    -1,
};

1 个答案:

答案 0 :(得分:1)

给我们&#34; struct console&#34;的定义。我想它的写作需要更多的参数。

某些编译器可能不会根据其设置给出关于不兼容类型功能分配的警告。

在决定参数的数量和类型是否正确的情况下,编译器只会查看它在struct console中的内容,而不关心你如何声明early_mrst_spi_write(这在初始化early_mrst_console期间可能很重要,可能会给出一个警告)。