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

C語言基礎入門:程序結構、GCC編譯、變量與輸入輸出詳解

     編輯:關於C語言

計算機語言層次與C語言定位

  • 機器語言:二進制指令,CPU直接執行
  • 匯編語言:助記符對應機器指令,需匯編器轉換
  • 高級語言:C、C++、Java、Python等,需編譯器/解釋器

C語言屬於強類型、編譯型、過程式語言,常用於底層開發(作業系統、嵌入式、驅動),故稱為「中級語言」——兼具高級語言可讀性與低級語言硬件操控能力。

Linux下C程序開發流程

1. vim編寫源文件 hello.c
2. gcc hello.c 編譯鏈接 → 生成 a.out
3. ./a.out 運行程序

C程序結構剖析

#include <stdio.h>  // 預處理指令:包含標準輸入輸出頭文件
int main() {         // 主函數:程序入口,返回類型int,無參數
    #include "s.c"   // 也可在函數內包含文件(不推薦)
    printf("hello c\n");  // 語句:以分號結束
    return 0;        // 返回0表示正常退出
}

三大組成部分:

  1. 預處理指令:以#開頭(#include、#define、#if等)
  2. 函數定義:返回類型 函數名(參數列表) { 函數體 }
  3. 語句:函數體內的執行單元,以;結束

程序編譯鏈接原理(GCC四步走)

  1. 預處理:展開宏、包含文件、條件編譯 → .i文件
  2. 編譯:生成匯編代碼 → .s文件
  3. 匯編:生成目標機器碼 → .o/.obj文件
  4. 鏈接:合併目標文件與庫函數 → 可執行文件a.out

GCC常用選項:

選項作用
-c僅編譯不鏈接,生成.o文件
-o file指定輸出文件名(默認a.out)
-std=c89/c99指定C標準版本
-Wall開啟所有警告
-E僅預處理
-S生成匯編文件

頭文件包含路徑差異

  • #include <stdio.h>:僅搜索系統目錄(/usr/include/)
  • #include "myheader.h":優先搜索當前目錄,再搜索系統目錄

C語言註釋規範

  • 單行註釋:// 註釋內容(C99標準)
  • 多行註釋:/* 註釋內容 */ ⚠️ 不能嵌套

註釋不參與編譯,是程序員溝通的重要方式。

編碼風格規範

  1. 長語句可分多行書寫
  2. 空格分隔運算符/關鍵字提升可讀性
  3. 縮進2-4空格體現層次結構
  4. 空行分隔邏輯模塊
  5. 標識符採用駝峰命名(myVariable)或下劃線命名(my_variable),見名知意

變量與數據類型核心概念

變量本質

變量 = 內存區域 + 名稱。使用前必須聲明類型,類型決定內存大小與解釋方式。

基本數據類型

變量聲明與初始化

int a;           // 聲明未初始化,值不確定
int b = 10;      // 聲明並初始化
int c, d = 5, e; // 多變量聲明,僅d初始化
float f = 1.0f;  // float常量需f後綴
char ch = 'A';   // 字符常量用單引號

標識符命名規則

  • 由字母、數字、下劃線組成,不能以數字開頭
  • 區分大小寫(var ≠ Var)
  • 長度理論無限制,但編譯器可能截斷
  • 不能與關鍵字衝突(int、return、if、while等32個保留字)

標準輸入輸出函數詳解

printf() 格式化輸出

printf("格式字符串", 變量列表);

格式字符串組成:普通字符 + 轉換格式(以%開頭)

類型關鍵字典型大小說明
字符char1字節存儲ASCII碼值,如'A'=65
整型int4字節含short/long/long long/unsigned/signed
單精度浮點float4字節7位有效數字,常量需f後綴
雙精度浮點double8字節15-16位有效數字,默認浮點類型
格式符含義示例
%d/%i有符號十進制整數printf("%d", 42);
%c單個字符printf("%c", 'A');
%s字符串printf("%s", "Hello");
%f浮點數(默認6位小數)printf("%f", 3.14);
%lfdouble類型printf("%lf", 3.14159);
%p指針地址printf("%p", &var);
%x/%X十六進制printf("%x", 255); // ff
%o八進制printf("%o", 9); // 11
%u無符號整數printf("%u", -1); // 4294967295

進階格式控制:%[標誌][寬度][.精度][長度]類型

  • -:左對齊(默認右對齊)
  • 0:寬度不足補0
  • m.n:m最小寬度,n精度(小數位數)
  • l:long修飾(%ld、%lf)
  • h:short修飾(%hd)

⚠️ 若需輸出%字符本身,用%%。

scanf() 格式化輸入

scanf("格式字符串", &變量1, &變量2, ...);
  • 需傳遞變量地址(&var),否則無法修改變量值
  • 格式符與printf基本一致
  • 遇不匹配字符停止掃描,已匹配值已存入變量
  • 返回成功賦值的變量個數
int a; 
scanf("%d", &a);  // 輸入整數存入a
printf("a=%d\n", a);

完整示例:輸入年月判斷天數

#include <stdio.h>
int main() {
    int year, month, maxDay = 31;
    printf("請輸入年月:");
    scanf("%d%d", &year, &month);
    
    if (month < 1 || month > 12) {
        printf("月份非法\n");
        return -1;
    }
    
    if (month == 4 || month == 6 || month == 9 || month == 11)
        maxDay = 30;
    else if (month == 2)
        maxDay = 28 + (year % 4 == 0 && year % 100 != 0 || year % 400 == 0);
    
    printf("%d年%d月有%d天\n", year, month, maxDay);
    return 0;
}

總結

掌握C語言基礎需重點理解:編譯流程、變量內存模型、類型系統、格式化I/O。建議在Linux環境下多動手實踐GCC編譯各階段輸出,觀察.i、.s、.o文件內容,深入理解源代碼如何變為可執行程序。

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