語法規則
1. 命名規則
- 概念:命名規則定義了在程式碼中如何命名變數、函式、類等識別符號。
- 語法:識別符號必須以字母或下劃線開頭,後面可以跟字母、數字或下劃線。
- 特點:遵循命名規則可以避免語法錯誤,提高程式碼的可讀性。
示例程式碼:
// 正確的命名
int myVariable = 10;
float price_123 = 20.5;
MyClass myClassInstance;
// 錯誤的命名
int 1stVariable = 10; // 錯誤:以數字開頭
int my-variable = 10; // 錯誤:包含非法字元
2. 作用域
- 概念:作用域決定了在程式的哪些部分可以訪問特定的變數或函式。
- 函式原型作用域:在函式引數列表中定義的變數僅在該函式原型中可見。
- 區域性作用域:在函式內部定義的變數僅在該函式內部可見。
- 類作用域:在類定義中宣告的成員變數和成員函式僅在該類內部可見。
- 名稱空間作用域:在名稱空間中定義的名稱僅在該名稱空間中可見。
示例程式碼:
void myFunction(int param) { // param只在myFunction的作用域內可見
int localVar = 5; // localVar只在myFunction的作用域內可見
}
class MyClass {
int classVar; // classVar只在MyClass的作用域內可見
public:
void classMethod() {
int localVar = 5; // localVar只在classMethod的作用域內可見
}
};
namespace MyNamespace {
int namespaceVar = 5; // namespaceVar只在MyNamespace的作用域內可見
}
3. 作用域與可見性問題
- 概念:當識別符號在不同的作用域中重名時,會發生遮蔽現象,導致外層作用域的識別符號在內層作用域中不可見。
- 特點:合理管理作用域和可見性可以避免命名衝突,提高程式碼的可維護性。
示例程式碼:
int globalVar = 10; // 全域性變數
void function() {
int globalVar = 20; // 區域性變數遮蔽了全域性變數
std::cout << globalVar << std::endl; // 輸出20
}
int main() {
function();
std::cout << globalVar << std::endl; // 輸出10,訪問全域性變數
return 0;
}
4. 關鍵字使用:改變作用域
- extern:用於宣告全域性變數或函式,告訴編譯器該變數或函式的定義在別的檔案或程式碼區域。
- 使用規則:
extern
通常用於在一個檔案中宣告另一個檔案中定義的全域性變數或函式。
- 使用規則:
- static:用於宣告區域性靜態變數或靜態成員變數,其生命週期貫穿整個程式,且在該作用域內可見。
- 在C中的使用:
static
變數或函式只能在定義它的檔案內訪問。 - 在C++中的使用:
static
成員變數和成員函式可以在類的所有物件之間共享。
- 在C中的使用:
extern的使用規則:
// file1.cpp
int a = 42; // 定義一個全域性變數a
// file2.cpp
extern int a; // 宣告a,告訴編譯器a的定義在別處
void function() {
std::cout << a << std::endl; // 安全訪問a
}
static在C和C++中的使用:
// C中的靜態全域性變數
static int staticGlobalVar = 10; // 只能在當前檔案中訪問
// C++中的靜態成員變數
class MyClass {
public:
static int staticMemberVar; // 必須在類外初始化
};
int MyClass::staticMemberVar = 20; // 初始化靜態成員變數
void function() {
static int localStaticVar = 30; // 只在function內可見,多次呼叫只初始化一次
}
這些規則和關鍵字確保了程式的組織結構和變數的生命週期,使得程式碼更加模組化和易於管理。