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 程序中随处可见。为代码元素(如变量或函数)选择正确的标识符对于增强程序的可读性、调试性和文档化非常重要。

广告