https://www.zhihu.com/people/xiangchun.zeng 網路流行的"科學的盡頭還是燒開水"這個梗,從發明蒸汽輪機以來,到現在的核電站、核動力航母最終都是通過“燒開水”這種能量轉換形式來實現發電和航行。一以貫之,那麼可以這麼講:“Windows核心編程的盡頭還是調函數” ...
https://www.zhihu.com/people/xiangchun.zeng
網路流行的"科學的盡頭還是燒開水"這個梗,從發明蒸汽輪機以來,到現在的核電站、核動力航母最終都是通過“燒開水”這種能量轉換形式來實現發電和航行。一以貫之,那麼可以這麼講:“Windows核心編程的盡頭還是調函數”。.NET、MFC、QT、GTK、AWTK等等這些框架最終都是通過“調函數”這種介面方式來實現Windows應用程式開發,只不過他們使用了面向對象思想和方法對Win32 API進行了封裝從而對客戶程式員隱藏了“調函數”這個動作。不要被這些高大上的名稱所迷惑,揭開他們神秘的面紗無非就是“調函數”。就好像沒有追到的那位女生,褪去“神秘面紗”其本質與其他女生沒有區別,就算追到了那又怎麼樣,一旦得到就生膩,剩下的就是痛苦和無聊(不是我說的,哲學老師說的)。還好沒有追到,不是說得不到的才是最好的嗎。Win32 API是構築Windows平臺的基石,微軟提供的MSDN Library文檔庫詳細解釋了Win32 API如何使用。 使用Win32 API實現一個簡單的對話框程式:(我離開校園進入企業實習面試的第1個題目就是這個)// 偽代碼 // 應用程式主函數 INT APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, INT nCmdShow) { // 1.設計一個視窗類 WNDCLASSEX w; // 2.註冊這個視窗類 RegisterClassEx(&w); // 3.創建視窗 CreateWindowEx(); // 4.更新顯示視窗 ShowWindow(); UpdateWindow(); // 5.應用程式消息迴圈 TranslateMessage(); DispatchMessage(); return 0; } // 應用程式消息處理回調函數 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { return 0; }
同樣使用QT實現一個簡單的對話框程式,可見使用框架可以大大提高開發效率。
// 偽代碼 // 創建並顯示對話框 QDialog *myDlg = new QDialog(); myDlg->show();以上引出了“調函數”這個概念,那麼一個大型程式可以簡單的看作成調用很多不同功能的函數來實現需求的集合。那麼調用函數成功與否,定位錯誤以及對錯誤的處理就顯得至關重要了,通過GetLastError函數可以獲取錯誤碼,通過FormatMessage函數可以將乾巴巴的錯誤碼轉換為世界各國程式員都能看懂的自然語言。在調用函數的過程中,傳入約定的有效的參數就一定執行成功並返回正確的結果,通過錯誤碼可以查詢到成功的原因;一旦執行失敗返回錯誤,通過錯誤碼可以查詢到明確的錯誤原因並及時修正錯誤。女生就不是這麼回事了,你把左臉伸過去她要扇你右臉,她說不要可能是要,究其原因,她惱怒的說你不懂她,女生就是這麼讓人捉摸不透,不可理喻。可見編程是多麼的確定及美好(這時候女生要說話了:跟你的程式過一輩子去吧!)。 所有的開發語言、開發框架都有一套異常、錯誤處理機制,一個聰明的、合格的程式員必然要學會使用這些機制巧妙的處理開發過程中碰到的各種問題。不然,程式不穩定、售後不開心、客戶不滿意、回款不及時、老闆就要炒你魷魚。那麼男女相處的過程中也要建立錯誤處理機制,不然,稍有不慎就一拍兩散、雞飛蛋打、滿盤皆輸。可見錯誤處理是多麼的重要。