C語言程序設計——這個函數原型你看懂了嗎


C語言程序設計——這個函數原型你看懂了嗎

雖然過去了好多年,但我仍然清楚地記得自己第一次看到signal函數原型時的驚訝。


學習UNIX環境C編程的朋友都知道,信號是繞不過去的一道坎,而信號處理的第一重要函數就是signal()。


什麼都不說了,直接上菜:

<code>#include <signal.h>
void (*signal(int signo, void (*func)(int)))(int);/<signal.h>/<code>

看到這個函數原型,您知道signal()函數怎麼用嗎?


C語言程序設計——這個函數原型你看懂了嗎

說明一下,這個函數聲明沒有寫錯,而且符合ANSI C語法。


當然,經過長達10分鐘的仔細分析後,對大部分C語言程序員來說,signal的函數聲明還是可以看懂:

(1)signal是一個函數;

(2)函數有兩個參數,函數有返回值;

(3)第一個參數為int類型;

(4)第二個參數為函數指針,並且函數指針對應的函數有一個參數,為int類型;

(5)signal的返回類型為函數指針,並且函數指針對應的函數有一個參數,為int類型。


可能是這個聲明太燒腦了,現在Linux中對signal函數這樣解釋:

在Linux命令行中,輸入man signal命令,得到下面的信息:

<code>NAME
signal - ANSI C signal handling

SYNOPSIS
#include <signal.h>
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);/<signal.h>/<code>


C語言程序設計——這個函數原型你看懂了嗎

這樣的聲明,基本上C語言程序員都能看懂了。


如果您看到最上面的signal函數聲明,有點頭暈,非常抱歉,就當剛剛喝了一杯茅臺酒吧


C語言程序設計——這個函數原型你看懂了嗎

謝謝您的閱讀!


分享到:


相關文章: