It is just an inefficient way of casting something to a boolean, I suppose. Perhaps the compiler can optimize the double negation away, but that is nowhere in any spec, so don't count on it.
The budget for doing optimizations is always limited and while I don't know how common this technique is in C, optimizing for poorly written code is in general a losing battle that waists the optimization budget.
This thread is the first time I hear people say that the bangbang boolean cast "operator" is poor coding. It's very idiomatic in my experience and it doesn't give me pause at all.
I mean, if it's forbidden by your particular coding style then fair enough but it's a bit harsh to cry at this bit of code because it makes use of it.
For what it's worth I made a quick grep for ' !!' in the linux kernel and found 2439 matches. I think it's more a matter of subjective taste than a sign of poor coding.
And I maintain that any C compiler worth its salt will handle '!!' just fine, it's a really simple optimization (and even if you consider double-negations poor style in your code it'll crop up quite often while inlining functions or expanding macros for instance).