2015-06-08 12 views
9

मुझे बस यह मिला।क्या करता है ((शून्य (*) (int)) - 1) मतलब है?

// /usr/include/sys/signal.h // OS X 
#define SIG_ERR ((void (*)(int))-1) 

((void (*)(int))-1) भाग का क्या अर्थ है?

यह

#define SIG_ERR -1 

के लिए अलग अलग है?

+3

[THIS] पर एक नज़र डालें (http://stackoverflow.com/questions/8419483/casting-integer-to-function-pointer-in-signal-code-why-does-this-work) – LPs

उत्तर

8

यह एक समारोह-सूचक को डाली है:

((type) value) 

कहाँ प्रकार void (*)(int) जो एक int तर्क को स्वीकार करने और void, जो वास्तव में एक संकेत हैंडलर के एक हस्ताक्षर है लौटने कार्य करने के लिए सूचक है:

typedef void (*sighandler_t)(int); 

आप cdecl उपकरण या वेब साइट के साथ इस तरह प्रकार डिकोड कर सकते हैं: http://cdecl.org/

+0

क्षमा करें, लेकिन [ cdecl यह कहता है] (http://cdecl.ridiculousfish.com/?q=%28%28void+%28*%29%28int%29%29-1%29)। –

+0

खैर @ सौरव घोष, आप सही हैं, सीडीईसीएल कहता है कि एक विफलता है, लेकिन असल में, मायौट मेरे अनुसार बिल्कुल सही है x)। मान लें कि सीडीसीएल उस प्रकार के कास्ट –

+0

@ सौरवगोश पर असफल रहा है; यही कारण है कि मैं सुझाव देता हूं कि लोग सीडीसीएल का उपयोग न करें। – haccks

2

यह फ़ंक्शन पॉइंटर में -1 का एक कलाकार है जिसे SIG_ERR के प्रकार के रूप में अपेक्षित किया जाता है। -1 का उपयोग सीधे उन स्थितियों पर काम नहीं करता है जहां कंपाइलर को सही प्रकार की आवश्यकता होती है।

संबंधित मुद्दे