00000010)。ADD A, B,需組譯器轉機器碼。貼近硬體,仍依賴機器型號,稱低階語言。printf("...")),需編譯器轉機器碼。一條高階語句對應多條機器指令。#include <stdio.h>?C 本身無輸入輸出語句,由編譯系統提供庫函式實現。#include 將標頭檔內容展開,使編譯器知曉 printf、scanf 等函式宣告。
main 函式與設計哲學int main() {
return 0;
}
int 為 C99 建議加上;早期 C 隱式 int。編譯器單向掃描,呼叫前未見定義會報錯(C3861: identifier not found)。解決:
① 前置宣告;② 將定義移至呼叫前。
標頭檔本質上就是集中管理前置宣告。
.c 編譯產生 .obj(目的檔),含機器碼但無法獨立執行(符號未解析)。.obj,連結器將所有 .obj 及庫檔合併,解析外部符號,生成 .exe。1, 55, 50.2, 78.34e4, 43.22E3。'1', 'a', '\n', '\033' (八進位), '\x1B' (十六進位) 皆為 ASCII 27 (ESC)。注意 '44' 非法(單引號只容一字元)。"hello world"(以 \0 結尾)。#define PI 3.1415926。#define PI 3.1415926 vs const double PI = 3.1415926;| 特性 | #define | const 變數 |
|---|---|---|
| 本質 | 前處理器符號替換 | 唯讀變數 |
| 佔記憶體 | 否(編譯期替換) | 是(執行期實體) |
| 型別檢查 | 無 | 有 |
| 作用域 | 檔案級(自定義點起) | 區塊/檔案級(遵循變數作用域) |
| 除錯可見性 | 不可見(符號表無) | 可見 |
建議:現代 C/C++ 優先用 const / constexpr,具型別安全、可除錯、支援作用域;#define 保留給條件編譯、巨集函式等無法用變數替代的場景。