什麼是 C/C++ 中的可重入函式?


在這裡,我們將瞭解什麼是 C 或 C++ 中的可重入函式。如果在函式執行期間可以對其進行中斷、然後為 ISR(中斷服務例程)提供服務接著恢復任務,那麼這個函式就稱為可重入函式。這種型別的函式用於遞迴、硬體中斷處理等不同的情況。

可重入函式應具備一些屬性。如下列出:

  • 這種型別的函式不會使用任何全域性或靜態變數。雖然沒有任何限制,但通常不建議這樣做。這是因為中斷可能會更改全域性變數的值,因此從 ISR 返回後,函式可能會獲取一些新值,並且結果也會有所不同。

  • 可重入函式不應修改其自身的程式碼。我們需要函式的操作在整個程式碼中保持一致。

  • 另一個屬性是可重入函式不應呼叫任何其他不可重入函式。

示例

int x;
int my_function() {
   return x * 10;
}
int my_second_function() {
   return my_function() * 20;
}

此處這兩個函式都不是可重入的。第一個函式使用了一個全域性變數,因此它不是可重入的。第二個函式呼叫了一個不可重入的函式,所以它也不是可重入函式。

示例

int my_function(int x) {
   return x * 10;
}
int my_second_function(int x) {
   return my_function(x) * 20;
}

這兩個函式現在是可重入函數了。

更新時間:2019 年 7 月 30 日

4 千次以上觀看

開啟您的 職業生涯

完成課程,獲得認證

開始學習
廣告
© . All rights reserved.