Re: Question about kernel module syntax !!

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Woodrow Douglass a écrit :
Bob Beers wrote:
On Mon, May 11, 2009 at 5:22 PM, Robert P. J. Day <rpjday@xxxxxxxxxxxxxx> wrote:
On Mon, 11 May 2009, Bob Beers wrote:

On Mon, May 11, 2009 at 5:00 PM, RT Mistler <rtmistler@xxxxxxxxxx> wrote:
Hi,

I've been looking at some kernel modules trying to map an embedded
devices resources and while going through a driver, I encountered an
"if" test that employed "!!", example:

if !!function_foo(args) {
 ...
}

What does the "!!" do? (I'm familiar with a single "!")
IIANM, it does "!" and then does "!" again, forcing boolean value,
true or false.
 it's not clear why that would make any difference since 0 is boolean
false and everything else is boolean true.  so under what
circumstances would doing a double negation change execution
behaviour?  or am i missing something?


Well, the OP's example is not a real example from the kernel source.
A usage I can imagine is where one requires a *boolean* value,
not just "0" or "not 0". This usage, "!!", provides that conversion, no?

-Bob
In my experience, saying "if (!!x)" produces cleaner assembly on some architectures than "if (x)". Your mileage may vary.
Yes I think it is similar to what the "likely" macro defines :

http://lxr.linux.no/linux+v2.6.29/include/linux/compiler.h#L105

Christophe

-Woody

--
To unsubscribe from this list: send an email with
"unsubscribe kernelnewbies" to ecartis@xxxxxxxxxxxx
Please read the FAQ at http://kernelnewbies.org/FAQ




--
To unsubscribe from this list: send an email with
"unsubscribe kernelnewbies" to ecartis@xxxxxxxxxxxx
Please read the FAQ at http://kernelnewbies.org/FAQ



[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux