2013-02-22 109 views
2

我的理解是,當評估C中的賦值語句時,還會返回賦值。
但是,當我運行下面的代碼時,似乎並不是這樣。當source_next_level(GLib隊列)爲空時,g_queue_pop_head()函數返回NULL,然後將其分配給current_q_node。
while循環條件檢查中的!= NULL比較似乎沒有評估此比較,因爲即使在current_q_node爲NULL時也進入了while循環。評估賦值語句的返回值

爲什麼while循環在g_queue_pop_head返回NULL時進入?

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"); 
} 

回答

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

你有以上的額外;

+0

@ H2CO3,但你需要良好的眼睛來捕捉這種錯誤;) – ouah 2013-02-22 19:23:23

+0

謝謝,不知道我怎麼沒看到。 – 2013-02-22 19:23:41