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, 1048👍, 0💬
Popular Posts:
What Are Data Pump Export and Import Modes? - Oracle DBA FAQ - Loading and Exporting Data Data pump ...
Can a variable be both const and volatile? Yes. The const modifier means that this code cannot chang...
How can we know the number of days between two given dates in PHP? Simple arithmetic: <?php $...
How is normally a project management plan document organized ? PMP document forms the bible of a pro...
What is the quickest sorting method to use? The answer depends on what you mean by quickest. For mos...