2

私の理解では、Cで代入ステートメントを評価すると、割り当てられた値も返されます。
ただし、以下のコードを実行すると、そうではないようです。source_next_level(GLibキュー)が空の場合、g_queue_pop_head()関数はNULLを返し、これがcurrent_q_nodeに割り当てられます。
ただし、whileループの条件付きチェックでの!= NULL比較は、current_q_nodeがNULLの場合でもwhileループに入るため、この比較を評価していないようです。

g_queue_pop_headがNULLを返すときにwhileループに入るのはなぜですか?

while((current_q_node = g_queue_pop_head(source_next_level)) != NULL);
{
  if(current_q_node == NULL) puts("It doesn't seem this should ever be printed but it is");
}
4

1 に答える 1

5
while((current_q_node = g_queue_pop_head(source_next_level)) != NULL);
                                                                    ^^^

上記に余分なものがあり;ます。

于 2013-02-22T19:16:09.187 に答える