Volker Grabsch wrote:
>> for(int i=0, e=xpo->nodesetval->nodeNr; i<e; ++i) {
>> xmlChar* p_val = xmlGetProp(xpo->nodesetval->nodeTab[i], "id");
>> if(p_val && 0==strcmp("4", p_val)) {
>
> Please note that in C the order of execution of
>
> p_val
>
> and
>
> 0==strcmp("4", p_val)
>
> is not specified!
For a short time you put me off my stride. I do this all the time.
Then I found the following statement in ISO C99 [1]:
6.5.13 Logical AND operator
4 Unlike the bitwise binary & operator, the && operator guarantees
left-to-right evaluation; there is a sequence point after the
evaluation of the first operand. If the first operand compares equal
to 0, the second operand is not evaluated.
> Some compilers could generate code that
> checks the second condition first, which could lead to a
> segmentation fault or similar.
This may be true. Fortunately I newer saw such a compiler.
Cheers, Andy
[1] http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf
_______________________________________________
xml mailing list, project page http://xmlsoft.org/
[email protected]
http://mail.gnome.org/mailman/listinfo/xml