工程化程式設計實戰callback介面學習
使用gcc工具進行編譯,這裡用到的命令是
gcc linktable.c menu.c -o ./se2020這個時候會發現報錯,出現了警告,原因是menu.c中缺少了string類庫,無法使用strcmp
匯入include後,重新編譯
3.執行程式 ./2020 測試menu小程式,此時發現quit命令報錯,顯示this is a wrong cmd!
二、排查錯誤原因
1.使用vs code進入menu.c檢視源**
此時發現,如果輸出「this is a wrong cmd!",表示p指標為空,接下來我們去找什麼時候p指標會為空
2.進入findcmd函式
發現這裡呼叫了searchlinktablenode(head,searchcondition)函式
3.進入searchlinktablenode函式
這裡有乙個int condition(tlinktablenode* pnode),這是乙個callback函式,searchlinktablenode是call-in方式函式,乙個函式作為引數,這個函式就是callback函式.
4.進入initmenudata函式
推斷鍊錶中quit對應的節點沒有被正常遍歷到,此時修改searchlinktablenode函式p != plinktable->ptail這個條件即可,pnode != null
5.得到正確結果
三、callback函式
一般情況下,應用程式會時常通過api呼叫庫里預先準備好的函式,有些庫函式需要應用先傳遞給它乙個函式,好在合適的時候來呼叫。這個被傳入的、又被呼叫的函式就是**函式。
約會結束後你送你女朋友回家,離別時,你肯定會說:「到家了給我發條資訊,我很擔心你。」對不,然後你女朋友回家以後還真給你發了條資訊。小夥子,你有戲了。
其實這就是乙個**的過程。你留了個函式b(要求女朋友給你發條資訊)給你女朋友,然後你女朋友回家,回家的動作是函式a。她必須先回到家以後,函式a的內容執行完了,再執行函式b,然後你就收到一條資訊了。
這裡必須清楚一點:函式b是你以引數形式傳給函式a的,那麼函式b就叫**函式。
參考部落格:
工程化程式設計實戰callback介面學習筆記
實驗要求一配 置環境1 安裝gcc 將檔案解壓,我這裡放的是c program files mingw w64 mingw bin資料夾 2 在系統變數中的path新增環境變數 開啟命令列視窗,輸入gcc v看見gcc版本相關資訊,安裝完成 3 安裝vscode,並安裝c c 偵錯程式 環境配置完成...
工程化程式設計實戰callback介面學習筆記
這是高軟的第二次作業,主要就是程式設計實戰,這次確實學到了東西,以前只是直到 函式,但是不知道 函式是幹嘛用的。一 實驗要求 在vscode下編譯執行 通過vscode gdb除錯程式找出quit命令無法執行的bug產生的原因 分析callback介面的執行機制,總結callback介面設計的方法 ...
工程化程式設計實戰callback介面學習筆記
實驗內容 1.在vscode下編譯執行lab5 1.tar.gz 即 2.通過vscode gdb除錯程式找出quit命令無法執行的bug產生的原因 通過實驗步驟1的執行結果可知,quit命令無法正常退出,找到列印出 this is a wrong cmd!對應的 塊,找到findcmd函式,發現是...