關於C什麼是存根例程?另外一個例子也將非常感謝。什麼是存根例程?
什麼是存根例程?
回答
存根例程可以是(至少)兩件事之一。
首先,它可以是一個佔位符例程您快速開發測試一個高級程序,與後來在一個替代真實版的意圖。這通常使用自上而下的開發(第一編碼的更高水平的再下來自己的方式工作,以更詳細的東西),可以很簡單的:
int getCount (void) { return 7; } // just return fixed value for testing.
或稍微複雜一點:
// Cycle through values for some variety.
int getCount (void) {
int retvals[] = {2,7,1,8,2,8,1,8,2,8,4,5,9};
static int pos = -1;
pos = (pos + 1) % (sizeof (retvals)/sizeof (*retvals));
return retvals[pos];
}
當然,一旦存根變得足夠複雜,你可能也只是實現真實的東西:-)
其次,它是常用的遠程過程調用(RPC)environm使用經濟需求。存根用於編組數據並將其傳送到另一端的服務器。
RPC需要爲客戶端和服務器創建存根函數。這是非常相似的函數原型在C,但最終的結果略有不同,如:
+----------------+
| Client |
| +----------+ | +---------------+
| | main | | | Server |
| |----------| | | +----------+ |
| | stub_cli |------->| stub_svr | |
| +----------+ | | |----------| |
+----------------+ | | function | |
| +----------+ |
+---------------+
在這個例子中,而不是在同一個程序調用function
,main
調用客戶存根功能(具有相同原型爲function
),負責打包信息並通過網絡將其傳輸到另一個進程。這可以是同一臺機器或不同的機器,這並不重要 - RPC的優點之一是可以隨意移動服務器。
在服務器中,有一個「偵聽器」進程將接收該信息並將其傳遞給服務器。服務器的存根接收信息,將其解包並將其傳遞給實際功能。
真正的函數然後做它需要的東西並返回到服務器存根,它可以打包返回信息並將其傳回客戶端存根。
然後客戶端存根解包並將其傳遞迴main
。
它是一個與真實函數具有相同簽名的函數,但它什麼都不做,並且可以像真實的東西一樣編譯和執行。例如
int MyStub(char * str)
{
/* Stub - Does Nothing */
return 0;
}
這些通常用作佔位符,因此可以首先計算總體程序結構,然後再詳細說明。
在C語言中,Stub代碼實際上調用main(),而不是OS或Compiler。
你的意思是'啓動'代碼?我還沒有聽說過在這種情況下使用的存根代碼。 – paxdiablo 2015-03-22 21:55:16
- 1. 如何知道什麼是存根?
- 2. 什麼是MeteorJS中的存根方法?
- 3. 什麼是存根主要方法?
- 4. 什麼是.exe文件存根(stub)?
- 5. 例外 - 什麼是「例外」?
- 6. 什麼是視圖和例程?
- 7. 什麼是根視圖?
- 8. 什麼是doc根目錄?
- 9. 什麼是影子根
- 10. 什麼是根目錄?
- 11. 什麼是trigger.io根網址?
- 12. 準確地給出一個例子的根視圖是什麼?
- 13. 設置MySQL的新實例什麼是當前根密碼?
- 14. 爲什麼在Microsoft.Fakes中沒有接口的存根存根
- 15. 在RSpec中,存根有什麼區別!和存根?
- 16. 存儲過程的要點是什麼?
- 17. 什麼是過程的暫存記憶?
- 18. 什麼是使用存儲過程
- 19. 什麼是破壞進程內存?
- 20. 什麼是在這個存儲過程
- 21. 什麼是Apache Kylin用例?
- 22. JavaScript - 什麼是單例類?
- 23. 什麼是Google AppEngine實例?
- 24. 什麼是實例變量?
- 25. 這是什麼例外?
- 26. 什麼是播放實例
- 27. ContextCompat.checkSelfPermission的用例是什麼?
- 28. 什麼是zeromq用例?
- 29. 什麼是存儲
- 30. 什麼是 「窗口= qobject_cast <QWindow *>(根)」 是什麼意思?
真棒的答案,謝謝一堆:) – 2010-10-27 03:36:20