Bernd Petrovitsch ha scritto:
On Wed, 2009-09-02 at 15:17 +0530, Anuz Pratap Singh Tomar wrote:
On Wed, Sep 2, 2009 at 2:30 PM, Bernd Petrovitsch <bernd@xxxxxxxxx>
wrote:
On Wed, 2009-09-02 at 13:31 +0530, Anuz Pratap Singh Tomar
wrote:
> that part of code wont be executed.
[...]
Then why not simply use "do { } while (0)" or similar?
[
> On Wed, Sep 2, 2009 at 1:24 PM, luca ellero
<lroluk@xxxxxxxxx> wrote:
[...]
> can someone please explain me the meaning/benefits
of the "if
> (0)" statement?
#if 0 is equivalent to blank, this is done while preprocessing, this
type of macro is used commonly to define some sort of debug(print
statement)
and if i am not wrong do{}while(0) will execute atleast once.
Yes, of course. Sorry, I meant an empty "do{}while(0)" (or similar
expression) which evaluates as a syntactic correct C expression.
BTW the "if(0)" above (and "#if 0" and an empty "do{}while(0)") have
also the issue that side effects (function calls, ++, --, += -=, ...) in
the parameters of the printk() get lost (which may be good[0] or bad).
That shouldn't be a problem in the Linux kernel as that is generally
avoided but in general that maybe a problem.
Bernd
[0]: It may be even good if the side effects are just there for the
printk() as such (e.g. formatting some data into a string just for
the printk/syslog/printf) but irrelevant for the "normal" program
flow.
Thanks to all for the answers.
If you don't mind I have another question:
why is there the "0;" statement after the call to printk?
#ifdef DEBUG
/* If you are writing a driver, please use dev_dbg instead */
#define pr_debug(fmt, arg...) \
printk(KERN_DEBUG fmt, ##arg)
#else
#define pr_debug(fmt, arg...) \
({ if (0) printk(KERN_DEBUG fmt, ##arg); 0; })
#endif
Thanks
Luca
--
To unsubscribe from this list: send an email with
"unsubscribe kernelnewbies" to ecartis@xxxxxxxxxxxx
Please read the FAQ at http://kernelnewbies.org/FAQ