以下是原文翻译成繁體中文的版本:
# C - 單元識別:編程中的命名之門
你好,未來的編程巫師們!今天,我們將踏上一段令人興奮的旅程,進入 C 編程的世界,特別聚焦於識別器。別擔心如果你從未寫過一行代碼——我們將從最基礎的知識開始,一起逐步學習。所以,拿起你的虛擬魔杖(鍵盤),讓我們一起深入探討!
## C 認識器是什麼?
想像你在一個滿是人的房間裡,你想叫某個人。你會用他們的名字,對吧?在編程的世界裡,識別器扮演著類似的功能。它們是我們給程序中各種元素(如變量、函數或結構)起的名字。這些名字幫助我們(和計算機)在程序中識別和使用這些元素。
### 為什麼識別器重要?
1. **可讀性**:好的識別器使你的代碼更容易理解。
2. **可維護性**:清晰的名稱在後期更新代碼時非常有幫助。
3. **除錯**:當出現問題時,命名良好的識別器可以是救星!
讓我們看一個簡單的例子:
```c
int age = 25;
在這裡,age
是一個識別器。我們給存儲人員年齡的變量起的名字。
C 認識器的命名規則
現在,就像你們學校可能對可以使用哪些名字有規定(正式文件上不能使用綽號!)一樣,C 語言對命名識別器也有規定。讓我們一一介紹:
-
允許的字符:
- 小寫字母(a-z)
- 大寫字母(A-Z)
- 數字(0-9)
- 下劃線(_)
-
首字符:必須是字母或下劃線。不能以數字開頭。
-
大小寫敏感性:
age
、Age
和AGE
在 C 語言中都是不同的識別器。 -
不能使用關鍵字:你不能將 C 語言的關鍵字用作識別器。
-
長度:雖然沒有官方限制,但在大多數 C 編譯器中,前 31 個字符是重要的。
常見的命名習慣
這些習慣雖然不是嚴格的規則,但它們能夠幫助你的代碼更具可讀性:
- 變量名稱使用小寫:
int student_count;
- 常量名稱使用大寫:
#define MAX_SIZE 100
- 函數名稱使用駝峰式:
void calculateTotal();
C 認識器的例子
讓我們看看一些有效和無效的識別器:
有效識別器 | 無效識別器 | 解釋 |
---|---|---|
age |
2ndPlace |
不能以數字開頭 |
_count |
my-variable |
不允許使用連字符 |
firstName |
float |
float 是關鍵字 |
MAX_SIZE |
$total |
不允許使用美元符號 |
player1 |
user name |
不允許使用空格 |
現在,讓我們看看它在實際中的應用:
#include <stdio.h>
#define MAX_SIZE 100 // 有效:常量使用大寫
int main() {
int age = 25; // 有效:變量使用小寫
char _initial = 'J'; // 有效:可以以下劃線開頭
float height_in_cm = 175.5; // 有效:允許使用下劃線
// 無效示例(為了避免錯誤,已註解):
// int 2ndPlace = 2; // 無效:以數字開頭
// float my-height = 175.5; // 無效:包含連字符
// char float = 'F'; // 無效:'float' 是關鍵字
printf("Age: %d\nInitial: %c\nHeight: %.1f cm\n", age, _initial, height_in_cm);
return 0;
}
當你運行這段代碼時,你會看到:
Age: 25
Initial: J
Height: 175.5 cm
程序中的每個識別器都扮演著特定角色,使代碼容易理解和維護。
C 認識器的作用域
現在,讓我們來討論一些較為高級的內容——識別器的範圍。將範圍看作是識別器在程序中的“可見性”。
範圍類型
-
區塊範圍:在區塊(用
{}
包含)內聲明的變量只在該區塊內可見。 - 文件範圍:在所有函數外部聲明的變量在整個文件中都可見。
- 函數範圍:函數中的標籤在整個函數中都可見。
- 函數原型範圍:函數原型中的參數在原型結束前都可見。
讓我們看看它在實際中的應用:
#include <stdio.h>
int globalVar = 10; // 文件範圍
void exampleFunction() {
int localVar = 20; // 區塊範圍
printf("Inside function: globalVar = %d, localVar = %d\n", globalVar, localVar);
}
int main() {
printf("In main: globalVar = %d\n", globalVar);
// printf("localVar = %d\n", localVar); // 這會導致錯誤
{
int blockVar = 30; // 區塊範圍
printf("Inside block: blockVar = %d\n", blockVar);
}
// printf("blockVar = %d\n", blockVar); // 這會導致錯誤
exampleFunction();
return 0;
}
這個程序展示了不同的範圍:
-
globalVar
在任何地方都可以訪問。 -
localVar
只能在exampleFunction
內訪問。 -
blockVar
只能在main
函數中的區塊內訪問。
不同類型的 C 認識器示例
讓我們以一個綜合示例來結尾,展示各種類型的識別器:
#include <stdio.h>
#include <string.h>
#define MAX_STUDENTS 50 // 常量識別器
// 函數原型
void printStudentInfo(char name[], int age);
// 結構定義
struct Student {
char name[50];
int age;
float gpa;
};
int main() {
int studentCount = 3; // 變量識別器
struct Student class1[MAX_STUDENTS]; // 數組識別器
// 初始化學生數據
strcpy(class1[0].name, "Alice");
class1[0].age = 20;
class1[0].gpa = 3.8;
strcpy(class1[1].name, "Bob");
class1[1].age = 22;
class1[1].gpa = 3.5;
strcpy(class1[2].name, "Charlie");
class1[2].age = 21;
class1[2].gpa = 3.9;
// 打印學生信息
for (int i = 0; i < studentCount; i++) {
printStudentInfo(class1[i].name, class1[i].age);
}
return 0;
}
// 函數定義
void printStudentInfo(char name[], int age) {
printf("Student: %s, Age: %d\n", name, age);
}
在這個示例中,我們使用了各種類型的識別器:
- 常量識別器:
MAX_STUDENTS
- 函數識別器:
main
、printStudentInfo
- 結構識別器:
Student
- 變量識別器:
studentCount
、name
、age
、gpa
- 數組識別器:
class1
每個識別器都在使程序功能完善和易於閱讀方面扮演著關鍵角色。
而你們,我的編程學徒們!我們已經穿越了 C 認識器的土地,從基本的定義到複雜的示例。記住,選擇好的識別器就像選擇正確的咒語一樣——它可以在你的編程冒險中發揮關鍵作用。持續練習,保持好奇心,在你意識到之前,你將會像專家一樣施展 C 編程的咒語!祝編程愉快!
Credits: Image by storyset