Categories:
.NET (357)
C (330)
C++ (183)
CSS (84)
DBA (2)
General (7)
HTML (4)
Java (574)
JavaScript (106)
JSP (66)
Oracle (114)
Perl (46)
Perl (1)
PHP (1)
PL/SQL (1)
RSS (51)
Software QA (13)
SQL Server (1)
Windows (1)
XHTML (173)
Other Resources:
Is if(p), where p is a pointer, a valid and portable test?
Is if(p), where p is a pointer, a valid and portable test?
✍: Guest
It is always valid.
When C requires the Boolean value of an expression, a false value is inferred when the expression compares equal to zero, and a true value otherwise. That is, whenever one writes
if(expr)
where ``expr'' is any expression at all, the compiler essentially acts as if it had been written as
if((expr) != 0)
Substituting the trivial pointer expression ``p'' for ``expr'', we have
if(p) is equivalent to if(p != 0)
and this is a comparison context, so the compiler can tell that the (implicit) 0 is actually a null pointer constant, and use the correct null pointer value. There is no trickery involved here; compilers do work this way, and generate identical code for both constructs. The internal representation of a null pointer does not matter.
The boolean negation operator, !, can be described as follows:
!expr is essentially equivalent to (expr)?0:1
or to ((expr) == 0)
which leads to the conclusion that
if(!p) is equivalent to if(p == 0)
``Abbreviations'' such as if(p), though perfectly legal, are considered by some to be bad style (and by others to be good style;
2016-02-29, 1240👍, 0💬
Popular Posts:
What's wrong with this initialization? char *p = malloc(10); My compiler is complaining about an ``i...
How To Escape Special Characters in SQL statements? - MySQL FAQs - Introduction to SQL Basics There ...
What Is URI? URI (Uniform Resource Identifier) is a superset of URL. URI provides a simple and exten...
How can I check for HTML errors? HTML validators check HTML documents against a formal definition of...
What are unadjusted function points and how is it calculated? Unadjusted function points = ILF + EIF...