Cprogramming 简明教程

C - Identifiers

Identifier in C 有助于标识 C 代码中的 variablesconstantsfunctions 等等。C 作为一种高级计算机语言,允许您通过名称引用内存位置,而不是使用其二进制或十六进制形式的地址。

C Identifiers

标识符是用户定义的名称,用于轻松引用内存。它也用于定义程序中的各个元素,如函数、自定义类型、标签等。因此,标识符是帮助程序员更方便地使用编程元素的名称。

当使用标识符定义变量或函数时, C compiler 会为其分配内存并将内存位置与 identifier 关联起来。因此,每当在指令中使用标识符时,C 编译器都可以访问其关联的内存位置。例如,当我们声明一个变量 age 并在图中所示的位置为其分配一个值时,编译器会为它分配一个内存位置。

memory

即使程序员可以使用自己选择的标识符为变量或函数等命名,但若要形成一个有效的标识符,也需要遵循某些规则。

Naming Rules of C Identifiers

以下是形成标识符所使用的规则:

  1. _ Keywords _ 不能用作标识符,因为它们是预定义的。

  2. 在 C 使用的字符集中,标识符中只允许字母(大写和小写)和下划线符号(_)。这意味着您不能将诸如标点符号之类的字符用作标识符的一部分。

  3. 标识符必须以字母(大写或小写)或下划线开头。这意味着数字不能作为标识符的第一个字符。

  4. 后续字符可以是字母或数字或下划线。

  5. 相同的标识符不能用作两个实体的名称。标识符只能在当前作用域中使用一次。

根据上述规则,以下是有效和无效标识符的一些示例:

Valid C Identifiers

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

Invalid C Identifiers

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

Examples of C Identifiers

以下程序显示错误:

#include <stdio.h>

int main () {

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

   return 0;
}

Error

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
  1. 标识符区分大小写,因此 age 与 AGE 不同。

  2. ANSI 标准识别标识符的长度为 31 个字符。虽然您可以选择具有更多字符的名称,但只能识别前 31 个字符。因此,您可以形成一个有意义的和描述性的标识符。

Scope of C Identifiers

在 C 语言中,标识符的作用域是指声明标识符并可以使用/访问标识符的位置。标识符有两个作用域:

Global Identifiers

如果标识符在声明任何函数之前已经在外部声明,则称为全局(外部)标识符。

#include <stdio.h>

int marks= 100; // external identifier

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

Output

The value of marks is 100

这是因为 marks 在任何块之外定义,所以它是一个外部标识符。

Local Identifiers

另一方面,任何函数内的标识符都是局部(内部)标识符。

#include <stdio.h>

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

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

Output

The value of marks is 100

这是因为 marks 在 main 函数中定义,所以它是一个内部标识符。

Examples of Different Types of C Identifiers

标识符也可以出现在函数的前向声明中。但是,函数的声明签名应与定义匹配。

Example of Variable Identifier

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

Example of Function Identifier

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

Example of User-defined Type Identifier

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

Example of Typedef Identifier

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};

Example of Label Identifier

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

   end:
      return 0;
}

Output

1
2
3
4
5
6
7
8
9

Example of Enum Identifier

#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;
}

Output

The value of enum week: 10

因此,_ identifiers _ 在 _ C program _ 中无处不在。为诸如变量或函数之类的编码元素选择正确的标识符对于提高程序的可读性、调试性和文档记录非常重要。