在其檔案中,windows c 運行時庫函式:
void __cdecl *signal(int sig, int (*func)(int, int));被定義為采用一個信號處理程式func,該處理程式回傳一個int.
我在檔案中找不到這個 int 應該是什么的解釋。
uj5u.com熱心網友回復:
這是signal鏈接檔案中的定義:
void __cdecl *signal(int sig, int (*func)(int, int));
Butsignal被定義為標準庫 C 函式(與 POSIX 標準一致,但在 Windows 中除外),因此如果 MS 檔案失敗,則下一個最好的方法是 C 標準。
查看 C 規范,signal相當混亂地定義為:
#include <signal.h>
void (*signal(int sig, void (*func)(int)))(int);
查看 VisualStudio C 頭檔案signal.h(為了清楚起見,洗掉了一些 MS-ism 宏),在函式指標型別的 typedef 的幫助下,定義更清晰,但等效:
typedef void (* _crt_signal_t)(int);
_crt_signal_t __cdecl signal(int _Signal, _crt_signal_t _Function);
請注意,_crt_signal_ttypedef 是內部的且未記錄。它不應該在可移植代碼中使用。
所以檔案是錯誤的:信號回呼只有一個int引數,它應該回傳void。
奇怪的是,鏈接檔案中的示例是正確的:
void SignalHandler(int signal) { /* ... */ }
int main()
{
typedef void (*SignalHandlerPointer)(int);
SignalHandlerPointer previousHandler;
previousHandler = signal(SIGABRT, SignalHandler);
/* ... */
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/522553.html
標籤:C视窗温纳皮信号
