首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C 語言自學筆記(一):十個核心問題釐清基礎觀念

     編輯:關於C語言

問題 1:為何區分低階/高階語言?

  • 機器指令:二進位碼(如 00000010)。
  • 機器語言:指令集合,CPU 型號不同則機器語言不同。
  • 符號語言(組合語言):ADD A, B,需組譯器轉機器碼。貼近硬體,仍依賴機器型號,稱低階語言。
  • 高階語言:不依賴具體機器,符合人類語言習慣(如 printf("...")),需編譯器轉機器碼。一條高階語句對應多條機器指令。

問題 2:高階語言主要分類

  • 面向過程:C、Pascal、Fortran……
  • 面向物件:C++、Java、C#、Python……

問題 3:C 語言簡史

  • 1973 年貝爾實驗室發明 C,重寫 Unix。
  • 1983 / 1989 / 1999 先後制定標準(C89/C90, C99)。

問題 4:為何要 #include <stdio.h>?

C 本身無輸入輸出語句,由編譯系統提供庫函式實現。#include 將標頭檔內容展開,使編譯器知曉 printf、scanf 等函式宣告。

問題 5:C 為何常用於系統軟體?

  • 能實現組合語言大部分功能。
  • 可直接操作實體位址(指標運算、型別轉換)。

問題 6:最簡 main 函式與設計哲學

int main() {
    return 0;
}
  • int 為 C99 建議加上;早期 C 隱式 int。
  • 回傳 0 表成功(成功只有一種),非 0 表失敗(失敗原因多樣,可用不同代碼區分)。

問題 7:為何需要函式宣告?

編譯器單向掃描,呼叫前未見定義會報錯(C3861: identifier not found)。解決:
① 前置宣告;② 將定義移至呼叫前。
標頭檔本質上就是集中管理前置宣告。

問題 8:為何有連結步驟?

  • .c 編譯產生 .obj(目的檔),含機器碼但無法獨立執行(符號未解析)。
  • 多檔案各自產生 .obj,連結器將所有 .obj 及庫檔合併,解析外部符號,生成 .exe。
  • 單檔案也需與 C 執行期庫連結。

問題 9:常見常數類型

  1. 數值常數:1, 55, 50.2, 78.34e4, 43.22E3。
  2. 字元常數:'1', 'a', '\n', '\033' (八進位), '\x1B' (十六進位) 皆為 ASCII 27 (ESC)。注意 '44' 非法(單引號只容一字元)。
  3. 字串常數:"hello world"(以 \0 結尾)。
  4. 符號常數:#define PI 3.1415926。

問題 10:#define PI 3.1415926 vs const double PI = 3.1415926;

特性#defineconst 變數
本質前處理器符號替換唯讀變數
佔記憶體否(編譯期替換)是(執行期實體)
型別檢查無有
作用域檔案級(自定義點起)區塊/檔案級(遵循變數作用域)
除錯可見性不可見(符號表無)可見

建議:現代 C/C++ 優先用 const / constexpr,具型別安全、可除錯、支援作用域;#define 保留給條件編譯、巨集函式等無法用變數替代的場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved