A little explanation needed
Can anyone explain the purpose of this #define...
#define __cpu_raise_softirq(cpu, nr) do { softirq_pending(cpu) |= 1UL <<
(nr); } while (0) // from interrupt.h
...versus the more "plain"...
#define __cpu_raise_softirq(cpu,nr) softirq_pending(cpu |= 1UL << (nr).
In otherwords, what's the use of a do{X}while(0) "loop" instead of just X. I'm not the world's best trained C programmer, so forgive me if I sound stupid.
Josh
Quoted 4 lines · Joshua Stewart
In otherwords, what's the use of a do{X}while(0) "loop" instead of just X. I'm not the world's best trained C programmer, so forgive me if I sound stupid.
http://www.kernelnewbies.org/faq/index.php3#dowhile
Hope that helps,
greg k-h
Thanks for the help. It all makes perfect sense after thinking about it from a preprecessor point of view. I'm just not used to using so many macros and so I don't realize all the implications of preprocessing quite yet. But, I'm learning.
Josh
Quoted 16 lines · Greg KH
Quoted 4 lines · Joshua Stewart
In otherwords, what's the use of a do{X}while(0) "loop" instead of just X. I'm not the world's best trained C programmer, so forgive me if I sound stupid.
http://www.kernelnewbies.org/faq/index.php3#dowhile
Hope that helps,
greg k-h
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Hi Joshua :)
Quoted 3 lines
In otherwords, what's the use of a do{X}while(0) "loop" instead of just X. I'm not the world's best trained C programmer, so forgive me if I sound stupid.
First, you do not sound stupid at all.
Second. The do...while use in macros is to avoid the 'swallow
semicolon' effect ;)) In other words, it makes the entire macro appear as a single statement. This avoids problems with 'else' constructs with macros that expand to multiple statements.
Someplace in the GNU cpp documentation you can find a far better
explanation of this effect and why the do...while helps (it makes the macro a single statement...).
Hope that helps :)
Raúl