CS50-week02-note-Compiling-Debugger

CS50-week02-note-Compiling-Debugger

week 2 Array

主要補充與彙整課程筆記
官方筆記:https://cs50.harvard.edu/x/2023/notes/2/
補充資訊來源::Chat GPT

編譯/Compiling

源代碼變成機器碼
概念上來說,將程式語言轉變成0 1

1. C語言編譯器 Clang

1.1 📝編譯操作後但命名不好理解

  1. clang hello

  2. 會出現a.out編譯文件

1.2 🔎解法

  • 可以透過命令行參數,自定義編譯文件名稱,如下:

    1. clang -o hello hello.c

    2. ./hello

1.3 🔎最佳解法

  • 直接用 Clang 操作編譯會更繁瑣

  • 預先配置了雲端的 vs code 使用 Clang 的一些功能,例如,make

  • make:

      make hello.c
    
    • make其實是個自動化程式,內部調用許多編譯器

2. 編譯過程4步驟

  1. preprocessing/預處理

  2. compiling/編譯

  3. assembling/彙編

  4. linking/鏈結

3. 專有名詞說明

  • 機器碼:0 1

  • 編譯:概念上來說,將程式語言轉變成 0 1

  • 彙編代碼:不是英語但至少能識別的一種代碼

  • 抽象:隱藏複雜信息,只顯示必要訊息

  • 命令行參數:在命令後面輸入一個額外單詞或關鍵詞組,可以修改該命令的行為

  • decompiling/反編譯:0 1 轉變為程式語言

    • 但不容易,通常變量名、函數名不會被在二進製中被記住

    • 逆向工程中的一種手段


Debugger/調試器

讓程式碼順心地運行

bug:代碼無法按到你的意願正確運行

1. Debugging 方式

1.1 調試工具

  • IDE 中基本都有

  • into 指令會進到當前函數內部,包括外部函數

1.2 語言表達

語言逐句表述問題,能幫助釐清邏輯問題

  1. 避免無止盡盯著問題

  2. 走一走

  3. 跟人說,當人不感興趣

  4. 對橡皮鴨子說

2. 其他

2.1 📝Magic Number/魔術數字

  • 魔術數字/Magic Number:在一段程式碼中同一個數字出現在2個(或更多)地方要改兩次,必須保證全改不然會出問題。

2.2 🔎解法

  • 當 Magic Number 出現應當使用常量取代

  • 在 C 語言中,常量可以被定義為全局常量