主要補充與彙整課程筆記
官方筆記:https://cs50.harvard.edu/x/2023/notes/2/
補充資訊來源::Chat GPT
編譯/Compiling
源代碼變成機器碼
概念上來說,將程式語言轉變成0 1
1. C語言編譯器 Clang
1.1 📝編譯操作後但命名不好理解
clang hello
會出現a.out編譯文件
1.2 🔎解法
可以透過命令行參數,自定義編譯文件名稱,如下:
clang -o hello hello.c
./hello
1.3 🔎最佳解法
直接用 Clang 操作編譯會更繁瑣
預先配置了雲端的 vs code 使用 Clang 的一些功能,例如,make
make:
make hello.c
- make其實是個自動化程式,內部調用許多編譯器
2. 編譯過程4步驟
preprocessing/預處理
compiling/編譯
assembling/彙編
linking/鏈結
3. 專有名詞說明
機器碼:0 1
編譯:概念上來說,將程式語言轉變成 0 1
彙編代碼:不是英語但至少能識別的一種代碼
抽象:隱藏複雜信息,只顯示必要訊息
命令行參數:在命令後面輸入一個額外單詞或關鍵詞組,可以修改該命令的行為
decompiling/反編譯:0 1 轉變為程式語言
但不容易,通常變量名、函數名不會被在二進製中被記住
逆向工程中的一種手段
Debugger/調試器
讓程式碼順心地運行
bug:代碼無法按到你的意願正確運行
1. Debugging 方式
1.1 調試工具
IDE 中基本都有
into 指令會進到當前函數內部,包括外部函數
1.2 語言表達
語言逐句表述問題,能幫助釐清邏輯問題
避免無止盡盯著問題
走一走
跟人說,當人不感興趣
對橡皮鴨子說
2. 其他
2.1 📝Magic Number/魔術數字
- 魔術數字/Magic Number:在一段程式碼中同一個數字出現在2個(或更多)地方要改兩次,必須保證全改不然會出問題。
2.2 🔎解法
當 Magic Number 出現應當使用常量取代
在 C 語言中,常量可以被定義為全局常量