工程化編程實戰callback接口學習筆記

1、在VSCode下編譯運行lab5-1.tar.gz

資源:http://pan.baidu.com/s/1pJ0qAIv

顯示報錯,在這個區域內未聲明。添加頭文件String.h


上面顯示不能打開輸出文件,而後我到工程目錄文件夾中找,並無生成menu.exe二進制文件。
而後我直接在終端利用gcc命令生成menu.exe
gcc -o menu menu.c linktable.c


按照錯誤提示,我在工程目錄下新建一個build文件夾,而後將gcc生成得menu.exe文件粘貼到這裏,發現仍是有別的錯誤。
因而我放棄了,仍是用終端命令運行程序。

查看結果,使用quit發現沒有退出程序,而是提示worng cmd,顯然是錯誤的。函數

2、經過VSCode+GDB調試程序找出quit命令沒法運行的bug產生的緣由

2ui

gcc -g linktable.c menu.c -o menu
   gdb menu
   ```
   ![](https://img2020.cnblogs.com/blog/1880361/202003/1880361-20200318202527400-1133813424.png)
   ![](https://img2020.cnblogs.com/blog/1880361/202003/1880361-20200318203440424-716929217.png)
   ![](https://img2020.cnblogs.com/blog/1880361/202003/1880361-20200318203500514-2026943992.png)
   ![](https://img2020.cnblogs.com/blog/1880361/202003/1880361-20200318203704873-1509894158.png)
   因爲返回了NULL,
   ![](https://img2020.cnblogs.com/blog/1880361/202003/1880361-20200318204033020-1973836808.png)
   因此在menu.c中判斷語句會打印出This is a wrong cmd!
   ![](https://img2020.cnblogs.com/blog/1880361/202003/1880361-20200318210217325-1766693865.png)
   查看源代碼獲得的上圖,可知quit在鏈表的最後一個節點。
   ![](https://img2020.cnblogs.com/blog/1880361/202003/1880361-20200318210506202-488352293.png)
   ![](https://img2020.cnblogs.com/blog/1880361/202003/1880361-20200318210608166-1796834197.png)
   運行成功!
#### 3、分析callback接口的運行機制,總結callback接口設計的方法 ####
 3
   關於回調函數的原理,我在這裏連接一篇知乎:https://www.zhihu.com/question/19801131
   在這個程序中
   ```
   tDataNode* FindCmd(tLinkTable * head, char * cmd)
{
   return  (tDataNode*)SearchLinkTableNode(head,SearchCondition);
}
   ```
   其中SearchLinkTableNode(head,SearchCondition)函數就是個回調函數,head是個結構體變量,而SearchCondition是個函數地址。
相關文章
相關標籤/搜索