0

我正在尝试理解具有以下几行的代码:

void terminate_pipe(int);
code code code...
struct sigaction new_Sigiterm;
new_Sigiterm.sa_handler = terminate_pipe;

我的问题是:

  • 像这样调用函数是什么意思?它只是NULL作为参数吗?

  • 它是无效的,所以无论如何new_Sigiterm.sa_handler都会是?NULL

谢谢。

4

3 回答 3

3

new_Sigiterm.sa_handler很可能是指向函数的指针。通过运行

new_Sigiterm.sa_handler = terminate_pipe;

这类似于说

new_Sigiterm.sa_handler = &terminate_pipe;

(就像在指针中一样)。这不是运行函数,它只是创建一个指向函数的指针,如果你“运行”指针,指向的函数就会运行。

这是如何声明函数指针:

void function(int x);

int main()
{
    //Pointer to function
    void (*foo) (int);

    //Point it to our function
    foo = function;

    //Run our pointed function
    foo(5);
}

有关函数指针的更多信息

于 2015-12-04T21:37:54.610 回答
1

像这样赋值的代码是设置一个处理程序(有时称为函数指针):基本上,在给定时间要运行的函数的地址。

C 中 this 的语法是命名函数,但不要放在()末尾。这将返回函数的地址。

new_Sigiterm.sa_handler = terminate_pipe;
于 2015-12-04T21:33:16.750 回答
0
  1. void terminate_pipe(int);不是函数调用它是函数的前向声明
  2. Innew_Sigiterm.sa_handler sa_handler是一个函数指针
于 2015-12-04T21:34:14.420 回答