函数名作为参数传递
假如不知道signal的函數(shù)原型,考慮child_handler函數(shù)的參數(shù)從哪里來(lái)?
?
void child_handler(int sig) { if (sig == SIGINT) kill(pid_parent, SIGUSR1); } int main(void) { ...... signal(SIGINT, child_handler); ...... }1、無(wú)參無(wú)返回值的函數(shù)名作為另一個(gè)函數(shù)的參數(shù)
?
?
#include <stdio.h> //定義handler是一個(gè)函數(shù)指針類型,無(wú)參無(wú)返回值 typedef void (*handler)(void); void output(void) { printf("Hello World!\n"); } //無(wú)參函數(shù)作為另一個(gè)函數(shù)的參數(shù) void test_func(handler func) { func(); } int main(void) { test_func(output); return 0; }?
運(yùn)行結(jié)果:Hello World!2、有參有返回值的函數(shù)名作為另一個(gè)函數(shù)的參數(shù) #include <stdio.h> //定義handler是一個(gè)函數(shù)指針類型,有兩個(gè)參數(shù)和返回值 typedef int (*handler)(int, int); int add(int a, int b) { return a+b; } //有參有返回值函數(shù)作為另一個(gè)函數(shù)的參數(shù) int test_func(int m, int n, handler func) { return func(m, n); } int main(void) { int a, b, sum; a = 3; b = 4; sum = test_func(a, b, add); printf("sum = %d\n", sum); return 0; } 運(yùn)行結(jié)果:sum = 7
對(duì)于開(kāi)始的疑惑,如果只從C語(yǔ)言的角度理解,原理是在執(zhí)行完 signal(SIGINT, child_handler); 函數(shù)后,signal函數(shù)會(huì)將第一個(gè)參數(shù) SIGINT 傳遞給 child_handler 函數(shù)。
?
轉(zhuǎn)載于:https://www.cnblogs.com/lialong1st/p/7756665.html
總結(jié)
- 上一篇: python asyncore
- 下一篇: logback 配置