2011-04-05 62 views
0
if ((*l).proc == NULL) 
    { 
     (*l).proc = current_process; 
     if(current_process == NULL) 
     { 
      __no_operation(); 
     } 
     if((*l).proc == NULL) 
     { 
      __no_operation(); 
     } 
    } 

當運行這段代碼,我添加了斷點在兩個空操作。然而,它只在二者中的第二個中斷。這怎麼可能?我是否正確使用這些指針?我指定的東西,但它是空隨即

+1

能在無操作已經被編譯器優化掉? – 2011-04-05 17:32:59

+2

只是一種風格isseu,但你爲什麼不這樣做? 'if(!l-> proc)'而不是'if((* l).proc == NULL)' – tjameson 2011-04-05 17:44:48

+0

另一件事,什麼是current_process和l-> proc?他們是指針嗎?整型?結構? – tjameson 2011-04-05 17:46:28

回答

0

任何理智的編譯器將具有優化的這兩個相同的塊成單個塊。它也可能會將兩個條件優化爲一個。如果你想看到兩個單獨運行,加puts("A");到第一和puts("B");到第二。

+0

我改變了它,所以if(current_process == NULL)超出了主if語句(因此是第一次運行),這應該避免編譯器優化(我認爲)。它仍然只在第二次禁用時打破。 – Smipims 2011-04-05 17:56:28

相關問題