C/C++

[C++] 幾種在函數傳遞 Smart Pointer 的方式整理

By Lin Chieh (Jayce) |  Nov 3, 2019  | c/c++

  相較於其他程式語言,C++ 的函數參數傳遞方式有很多種方法,如傳值(value)、傳址(address/pointer),及傳參考(reference)等,再加上 const 修飾詞後又有不同的變化。

  C++11 引入的 unique_ptr 及 shared_ptr 等智慧指標,也同樣有傳值或傳參考等方式。雖然很多手段都可以達到相同目的,但如果透過傳遞方式的不同,就可以表現出函數設計者想傳達的「語意」,那一定會是比較好的設計,同時好的設計也能借助編譯器的輔助來降低程式出錯的機會。

  針對各種不同需求及使用情境,這篇整理我蒐集到的建議實作方式,主要源自於 C++ Core Guideline,提供給各位參考。

繼續閱讀

VS Code GNU Global 相依專案路徑設定

By Lin Chieh (Jayce) |  Jul 13, 2019  | 開發環境, c/c++

  在 VS Code + GNU Global - 打造 Trace Linux Kernel 環境 這篇我有介紹我改造的 VS Code GNU Global 套件。當初會選擇 GNU Global 作為主要的 tagging engine,除了他的速度很快以外,還有另一個的原因是 GNU Global 具備將 tag files 分散在不同 Project 的功能,再透過相依性設定搜尋路徑。

  分散 Tag File 在某些大型專案非常有用,他可以有效加速 Tag 搜尋和更新的速度。另外他也支援將 tag files 放在專案目錄以外的地方,以下會分別介紹這兩個功能在 VS Code 中要如何設定。

繼續閱讀

Linux 系統程式設計 - fd 及 open()、close() 系統呼叫

By Lin Chieh (Jayce) |  Dec 30, 2018  | c/c++, linux kernel

  開始接觸 Linux Kernel 也有差不多一年的時間,最近開始有明顯地感覺到有某種瓶頸存在,仔細思考了一下覺得是底子不夠,所以決定從基礎來好好學習一下,再搭配核心程式碼來確認是否是看到的那樣。這篇主要筆記 file descriptor、open() 及 close() 系統呼叫相關的部分,主要參考 Robert Love 的 Linux System Programming

繼續閱讀

[C/C++] enum to string 的方法實作 (X Macro)

By Lin Chieh (Jayce) |  Sep 20, 2018  | c/c++

  相信很多人很多時候都會想要把 enum 列舉的數值轉換成 string,方便寫出檔案或顯示到 UI 上,這種轉換的方法在很多高階語言,例如 C#、Java 等都有方法直接支援,但是 C/C++ 就沒這麼方便了。以下介紹幾種在 C++ 實作 enum 轉 string 的方法。

繼續閱讀