无限循环中的return语句

如果返回语句位于此无限while(1)循环内,则返回语句返回何处? 更重要的是,我不知道while(1)循环可能被打破???

void __attribute__((interrupt, no_auto_psv)) _T3Interrupt(void) { int count; IFS0bits.T3IF = 0; // clear Tmr3 interrupt flag StopMotor(); IEC0bits.ADIE = 0; // disable ADC interrupt IEC0bits.CNIE = 0; // disable CN interrupt IEC0bits.T3IE = 0; // disable Tmr3 interrupt T3CONbits.TON = 1; // restart tmr3 count = 0; while (1) { if (IFS0bits.T3IF) { IFS0bits.T3IF = 0; // clear flag if (count++ >= RESTART_COUNT) { IEC0bits.ADIE = 1; // enable ADC interrupt IEC0bits.CNIE = 1; // enable CN interrupt T3CONbits.TON = 0; // stop tmr3 IEC0bits.T3IE = 1; // enable Tmr3 interrupt return; } } } return; } 

无论函数在函数中的位置如何,所有返回语句都将返回到调用函数的任何位置。

例如,如果我写道:

 int main() { _iT3Interrupt(); } 

然后_iT3Interrupt的return语句将控制流还原为main

此外,可以使用以下任何构造退出任何循环(即使条件为1true或某些等效项):

 break; //exits the loop return; //exits the function, thus ending the loop goto ; //self-explanatory exit(); abort(); //exits the program. Bit of a stretch to say that this ends the loop... 

在C ++中, throw ,它将展开堆栈直到它到达相应的catch,从而退出函数。 C setjmplongjmp函数也可能在这里适用,但我不知道足够的C来确定它们的用法,

有多种方法可以通过return break goto退出循环

如果IFS0bits.T3IF != 0则使用您的代码片段,当count >= RESET_COUNT时,它最终会退出循环。 之后它将返回调用函数的位置。

要回答你的第二个问题,而(1)更像是while(true)。 因此,它会一直循环直到遇到中断。

当调用函数时,调用函数(或ISR)的地址放在堆栈的顶部。
return的执行将结束函数(或ISR)。 程序计数器(PC)使用此地址更新,因此程序流可以继续调用地址后面的语句。