C - 識別符號



C 語言中的識別符號有助於標識 C 程式碼中的變數常量函式等。C 語言是一種高階計算機語言,允許您使用名稱來引用記憶體位置,而不是使用其二進位制或十六進位制地址。

C 識別符號

識別符號是使用者定義的名稱,用於方便地引用記憶體。它也用於定義程式中的各種元素,例如函式、使用者定義型別、標籤等。因此,識別符號是幫助程式設計師更方便地使用程式設計元素的名稱。

當使用識別符號定義變數或函式時,C 編譯器會為其分配記憶體,並將記憶體位置與識別符號關聯起來。因此,每當在指令中使用識別符號時,C 編譯器都可以訪問其關聯的記憶體位置。例如,當我們宣告一個名為 age 的變數併為其賦值(如下圖所示)時,編譯器會為其分配一個記憶體位置。

Memory

即使程式設計師可以使用自己選擇的識別符號來命名變數或函式等,也有一些規則需要遵循才能形成有效的識別符號。

C 識別符號的命名規則

以下是形成識別符號的規則:

  • 關鍵字不能用作識別符號,因為它們是預定義的。
  • 在 C 語言使用的字元集中,只有字母(大寫和小寫)和下劃線符號 (_) 允許在識別符號中使用。這意味著您不能使用標點符號等字元作為識別符號的一部分。
  • 識別符號必須以字母(大寫或小寫)或下劃線開頭。這意味著數字不能作為識別符號的第一個字元。
  • 後續字元可以是字母、數字或下劃線。
  • 同一個識別符號不能用作兩個實體的名稱。識別符號只能在其當前作用域中使用一次。

根據上述規則,有效和無效識別符號的一些示例如下:

有效的 C 識別符號

age, Age, AGE, average_age, __temp, address1, phone_no_personal, _my_name

無效的 C 識別符號

Average-age, my name, $age, #phone, 1mg, phy+maths

C 識別符號示例

以下程式顯示一個錯誤:

#include <stdio.h>

int main () {

   /* variable definition: */
   int marks = 50;
   float marks = 65.50;
   printf("%d %f", marks, marks);

   return 0;
}

錯誤

main.c: In function 'main':
main.c:7:10: error: conflicting types for 'marks'; have 'float'
    7 |    float marks = 65.50;
      |          ^~~~~
main.c:6:8: note: previous definition of 'marks' with type 'int'
    6 |    int marks = 50;
      |        ^~~~~
main.c:8:13: warning: format '%d' expects argument of type 'int', but argument 2 has type 'double' [-Wformat=]
    8 |    printf("%d %f", marks, marks);
      |            ~^      ~~~~~
      |             |      |
      |             int    double
      |            %f  

  • 識別符號區分大小寫,因此 age 與 AGE 不相同。
  • ANSI 標準識別識別符號的長度為 31 個字元。雖然您可以選擇一個具有更多字元的名稱,但只有前 31 個字元會被識別。因此,您可以形成一個有意義且具有描述性的識別符號。

C 識別符號的作用域

在 C 語言中,識別符號的作用域是指宣告識別符號並可以使用/訪問它的位置。識別符號有兩個作用域

全域性識別符號

如果在任何函式宣告之前在外部聲明瞭一個識別符號,則將其稱為全域性(外部)識別符號。

示例

#include <stdio.h>

int marks= 100; // external identifier

int main() {
   printf("The value of marks is %d\n", marks);
}

輸出

The value of marks is 100

這是因為 marks 在任何塊之外定義,所以它是外部識別符號。

區域性識別符號

另一方面,任何函式內部的識別符號都是區域性(內部)識別符號。

示例

#include <stdio.h>

int main() {
   int marks= 100; // internal identifier

   printf("The value of marks is %d\n", marks);
}

輸出

The value of marks is 100

這是因為 marks 在 main 函式內部定義,所以它是內部識別符號。

不同型別 C 識別符號的示例

識別符號也可以出現在函式的前向宣告中。但是,函式的宣告簽名應該與定義匹配。

變數識別符號示例

int marks1 = 50, marks2 = 60;
float avg = (float) (marks1+marks2)/2;

函式識別符號示例

int average(int marks1, int marks2)
{
   return (float) (marks1+marks2)/2;
}

使用者定義型別識別符號示例

struct student
{
   int rollno;
   char *name;
   int m1,m2,m3;
   float percent
};
struct student s1 = {1, "Raju", 50, 60, 70, 60.00};

typedef 識別符號示例

struct student
{
   int rollno;
   char *name;
   int m1,m2,m3;
   float percent
};
typedef struct student STUDENT;
STUDENT s1 = {1, "Raju", 50, 60, 70, 60.00};

標籤識別符號示例

#include <stdio.h>
int main()
{
   int x=0;
   begin:
   x++;
   if (x>=10)
      goto end;
   printf("%d\n", x);
   goto begin;

   end:
      return 0;
}

輸出

1
2
3
4
5
6
7
8
9

列舉識別符號示例

#include <stdio.h>
enum week{Mon=10, Tue, Wed, Thur, Fri=10, Sat=16, Sun};

int main() {
   printf("The value of enum week: %d\n",Mon);
   return 0;
}

輸出

The value of enum week: 10

因此,識別符號C 程式中隨處可見。為程式碼元素(如變數或函式)選擇正確的識別符號對於增強程式的可讀性、除錯性和文件化非常重要。

廣告