结构编译时错误

时间:2012-05-25 22:06:45

标签: c compiler-errors

我编写了一个程序来捕获<ctrl> + <c>信号,然后输出一个列表,但是我有一个编译时错误,我似乎无法通过。我一直收到这个错误:

  

无法在赋值

中将`void()()'转换为`void(*)(int)'

根据编译器,错误发生在这行代码中:

    handler.sa_handler = handle_SIGINT;

以下是周围的代码:

cmdcounter = 1;

/*set up the signal handler*/
struct sigaction handler;
handler.sa_handler = handle_SIGINT;
sigaction(SIGINT, &handler, NULL);

strcpy(buffer, "Caught <ctrl><c>\n");

handle_SIGINT在程序的早期定义:

void handle_SIGINT()
{
    write(STDOUT_FILENO, buffer, strlen(buffer));

    // Print out last 10 commands that were used.
    printf("Most recent commands entered:\n");
    if(cmdcounter <= 10) {
        for (i=0; i < cmdcounter; i++) {
            printf("%d. %s\n", i+1, cmd[i]);
        }
    }
    else {
        for (i = cmdcounter-10; i < cmdcounter; i++) {
            printf("%d. %f\n", i, cmd[i]);
        }
    }
}

一切看起来都不错,但显然不是。有谁知道是什么引发了这个错误?

2 个答案:

答案 0 :(得分:4)

您的函数handle_SIGINT错误。

告诉我们这个功能,我们将能够准确地告诉你它是怎么回事。

handle_SIGINT SUPPOSED 为:

void handle_SIGINT(int){....}

您遗漏了int部分作为参数。

答案 1 :(得分:3)

错误告诉您签名不匹配。 handle_SIGINT应该是:

void handle_SIGINT(int ){ ... }