Unclear behavior of "," operator in C -
in given code found following sequence,
data = poc_p_status, te_ok;
i don't understand mean.
does data element receive first or second element or else?
update:
i read somewhere behavior this,
if write that:
if(data = poc_p_status, te_ok) { ... }
then teh if clause true if te_ok true.
what mean?
it's equivalent following code:
data = poc_p_status; te_ok;
in other words, assigns poc_p_status
data
, evaluates te_ok
. in first case, expression stands alone, te_ok
meaningful if it's macro side effects. in second case, expression part of if
statement, evaluates value of te_ok
. statement rewritten as:
data = poc_p_status; if (te_ok) { ... }
from c11 draft (http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf) :
the left operand of comma operator evaluated void expression; there sequence point after evaluation. right operand evaluated; result has type , value. if attempt made modify result of comma operator or access after next sequence point, behavior undeļ¬ned.
that means in expression:
a, b
the a
evaluated , thrown away, , b
evaluated. value of whole expression equal b
:
(a, b) == b
comma operator used in places multiple assignments necessary 1 expression allowed, such for
loops:
for (int i=0, z=length; < z; i++, z--) { // things }
comma in other contexts, such function calls , declarations, not comma operator:
int func(int a, int b) {...} ^ | not comma operator int a, b; ^ | not comma operator
Comments
Post a Comment