2011-04-05 22 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

相关问题