* anything to do with pointer to functions maybe? @ 2004-12-23 10:24 soraberri 2004-12-23 11:47 ` Jan-Benedict Glaw 2004-12-30 11:26 ` Glynn Clements 0 siblings, 2 replies; 4+ messages in thread From: soraberri @ 2004-12-23 10:24 UTC (permalink / raw) To: linux-c-programming Hi all! I'm having troubles understanding code: what type is __sighandler_t if it is defined this way:? typedef void (*__sighandler_t) (int); and then, what does this definition mean: #define SIG_IGN ((__sighandler_t) 1) thanks very much if you know and you tell me ;·) regards - To unsubscribe from this list: send the line "unsubscribe linux-c-programming" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: anything to do with pointer to functions maybe? 2004-12-23 10:24 anything to do with pointer to functions maybe? soraberri @ 2004-12-23 11:47 ` Jan-Benedict Glaw 2004-12-23 14:19 ` soraberri 2004-12-30 11:26 ` Glynn Clements 1 sibling, 1 reply; 4+ messages in thread From: Jan-Benedict Glaw @ 2004-12-23 11:47 UTC (permalink / raw) To: linux-c-programming [-- Attachment #1: Type: text/plain, Size: 1573 bytes --] On Thu, 2004-12-23 11:24:39 +0100, soraberri <421246@posta.unizar.es> wrote in message <cqe6ed$ldf$1@sea.gmane.org>: > Hi all! > I'm having troubles understanding code: > > what type is __sighandler_t if it is defined this way:? > typedef void (*__sighandler_t) (int); We define that any signal handling function doesn't return anything useful (void, that is), and all these functions get a single argument (of type int) supplied. > and then, what does this definition mean: > #define SIG_IGN ((__sighandler_t) 1) Also, we don't want *all* signals to actually be handled. Some are to be ignored. Since we can only use function pointers (now of type __sighandler_t), we need to have a special magic value (1 in this case) that we can use. However, "1" alone doesn't make a good function pointer, nor is it a function at all or does accept arguments. To "look" like a function pointer of correct type, "1" is casted to be of __sighandler_t. There would have been another approach: we could have written a small function that does nothing and could be used instead. However, it's address could change, so it doesn't work well as an API. This is why instead a distenct value (1) is used instead. MfG, JBG -- Jan-Benedict Glaw jbglaw@lug-owl.de . +49-172-7608481 _ O _ "Eine Freie Meinung in einem Freien Kopf | Gegen Zensur | Gegen Krieg _ _ O fuer einen Freien Staat voll Freier Bürger" | im Internet! | im Irak! O O O ret = do_actions((curr | FREE_SPEECH) & ~(NEW_COPYRIGHT_LAW | DRM | TCPA)); [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 189 bytes --] ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: anything to do with pointer to functions maybe? 2004-12-23 11:47 ` Jan-Benedict Glaw @ 2004-12-23 14:19 ` soraberri 0 siblings, 0 replies; 4+ messages in thread From: soraberri @ 2004-12-23 14:19 UTC (permalink / raw) To: linux-c-programming Jan-Benedict Glaw wrote: > On Thu, 2004-12-23 11:24:39 +0100, soraberri <421246@posta.unizar.es> > wrote in message <cqe6ed$ldf$1@sea.gmane.org>: > >>Hi all! >>I'm having troubles understanding code: >> >>what type is __sighandler_t if it is defined this way:? >>typedef void (*__sighandler_t) (int); > > > We define that any signal handling function doesn't return anything > useful (void, that is), and all these functions get a single argument > (of type int) supplied. > > >>and then, what does this definition mean: >> #define SIG_IGN ((__sighandler_t) 1) > > > Also, we don't want *all* signals to actually be handled. Some are to be > ignored. Since we can only use function pointers (now of type > __sighandler_t), we need to have a special magic value (1 in this case) > that we can use. > > However, "1" alone doesn't make a good function pointer, nor is it a > function at all or does accept arguments. To "look" like a function > pointer of correct type, "1" is casted to be of __sighandler_t. > > There would have been another approach: we could have written a small > function that does nothing and could be used instead. However, it's > address could change, so it doesn't work well as an API. This is why > instead a distenct value (1) is used instead. > > MfG, JBG > Thanks Jan, I think I have understood... regards and have happy days ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: anything to do with pointer to functions maybe? 2004-12-23 10:24 anything to do with pointer to functions maybe? soraberri 2004-12-23 11:47 ` Jan-Benedict Glaw @ 2004-12-30 11:26 ` Glynn Clements 1 sibling, 0 replies; 4+ messages in thread From: Glynn Clements @ 2004-12-30 11:26 UTC (permalink / raw) To: soraberri; +Cc: linux-c-programming soraberri wrote: > I'm having troubles understanding code: > > what type is __sighandler_t if it is defined this way:? > typedef void (*__sighandler_t) (int); Pointer to function taking an int argument and returning void. C's type syntax uses the same grammatical structure as expressions, so the above is interpreted as saying that the expression: (*__sighandler_t) (int) has type "void". The syntax <expr>(<args>) indicates a function call where the function is <expr> and the arguments are <args>, so: (*__sighandler_t) (int) is a function call where (*__sighandler_t) is the function and the arguments consist of a single integer. Coupled with the knowledge that the overall type is "void", the expression: (*__sighandler_t) must be a function taking an integer argument and returning void. If an expression *P has type T then the type of P is "pointer to T", so __sighandler_t must be a pointer to a function taking an integer argument and returning void. -- Glynn Clements <glynn@gclements.plus.com> ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2004-12-30 11:26 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2004-12-23 10:24 anything to do with pointer to functions maybe? soraberri 2004-12-23 11:47 ` Jan-Benedict Glaw 2004-12-23 14:19 ` soraberri 2004-12-30 11:26 ` Glynn Clements
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox