【C】C语言中标识符声明的几个关键字总结

C语言中声明一个名称就是把一个标识符与某个C语言对象相关联,如变量、函数或类型,C语言中可以声明的名称包括:变量、函数、类型、类型标志、结构成员与联合成员、枚举常量、语句标号和预处理器宏。除了语句标号和预处理器宏之外,所有标识符都在C语言声明中声明,变量、函数、类型放在声明的声明符中,类型标志、结构成员与联合成员和枚举常量在声明的某种类型说明符中声明,语句标号在C语言函数中出现时声明,而预处理器宏用#define预处理器命令声明。

如下列声明:
extern const volatile unsigned long int i;
习惯上先写存储类说明符extern,然后是类型限定符const volatile,最后是类型说明符unsignedlong int。

存储类说明符确定所声明对象的生存期(除了typedef是个特例),声明中最多可以出现一个存储类说明符,具体列举如下:
auto:只在块内的变量声明中允许,表示变量具有本地(自动)生存期(这是默认,因此C语言程序中很少看到auto说明符)。块声明中,若为非函数类型,默认存储类说明符为auto。
extern:出现在顶层或块中的外部函数与变量声明中,表示声明的对象具有静态生存期,连接程序知道其名称。顶层声明中默认存储类说明符为extern,但省略存储类说明符不同于提供extern。块声明中,若是函数,默认存储类说明符为extern。
register:可以用于本地变量或参数声明,作用相当于auto,只不过它要向编译器提供提示说该对象会被频繁使用,应该采取一种最小化访问时间的分配方式。函数参数默认无存储类说明符,如非register,如果有实际需求,可给函数参数添加存储类说明符register。
static:可以放在函数与变量声明中。在函数定义时,其只用于指定函数名而不将函数导出到连接程序。在函数声明中,其表示文件后面会定义声明的函数,存储类为static。在数据声明中,总是表示定义的声明不导出到连接程序。用这个存储类说明符的变量具有静态生存期(而auto则指定本地生存期)。
typedef:表示声明定义新的数据类型名,而不是函数与变量声明。数据类型名出现在变量声明中出现变量名的地方,数据类型本身是变量名要指定的类型。

类型限定符const、volatile与restrict指定类型的其它属性,这些属性只在通过左值访问该类型对象时与类型有关。const与volatile是C89中增加的,restrict是C99中增加的。
const:const限定类型的左值表达式不能用来修改对象,即这种左值不能作为赋值表达式的左操作数或递增与递减运算符的操作数,目的是用const限定符指定数值不变的对象,让C语言编译器保证编程人员不改变这个值。const用于指针声明时,位置不同,效果不同,如下例子:
int * const const_pointer; // 常量指针const int * pointer_to_const; // 常量数据的指针
volatile:volatile类型限定符告诉标准C语言实现,某些对象可以用实现不能控制的方式改变数值,即易失对象。volatile最常见的用法是对特殊内存地址提供可靠的访问,计算机硬件或中断处理器之类的异步进程使用这些特殊内存地址。
restrict:restrict只能用于限定对象指针或不完整类型,作为C语言编译器的非别名提示,即目前只有指针是访问其所指对象的唯一方式,破坏这个假设会造成不确定行为。这样做的好处是,能帮助编译器进行更好的代码优化,生成更有效率的汇编代码。

函数声明符是C99中增加的,函数说明符inline只能在函数声明中出现,这种函数称为内联函数,函数说明符可以多次出现而不改变含义,使用inline提示C实现,函数调用应尽量快。

类型说明符对所声明的程序标识符的数据类型提供一定信息,其它类型信息由声明符指定,类型说明符还可以定义(作为副作用)类型标志、结构成员名与联合成员名和枚举常量。最初,C语言允许省略变量声明和函数定义中的类型说明符,这时默认类型说明符为int,但现代C语言认为这是不良编程风格,事实上C99把它当作错误处理,较早的编译器没有实现void类型,因此函数定义中省略类型说明符的目的是告诉读者这个函数不返回数值(但编译器要假设其返回数值),现代C语言则用void类型声明无返回值的函数。结构、联合或枚举定义的类型指定符定义新类型或枚举常量,如果只要定义类型,则可以从声明中省略所有声明符,只编写类型说明符,无意义的声明通常被忽略。关于类型的详细说明将在后面介绍。


  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: C语言和Java的标识符有以下区别: 1. 标识符命名规则不同:C语言标识符只能由字母、数字和下划线组成,而Java标识符可以使用任何Unicode字符。 2. 大小写敏感性不同:C语言标识符是大小写敏感的,而Java标识符是大小写敏感的。 3. 关键字不同:C语言和Java的关键字不完全相同,因此在命名标识符时需要注意。 4. 数据类型不同:C语言和Java的数据类型不完全相同,因此在命名变量时需要注意。 5. 类型定义不同:C语言使用typedef关键字来定义类型,而Java使用关键字class来定义类型。 总之,在使用标识符时,需要遵循各自的规则,以确保程序的正确性和可读性。 ### 回答2: C语言和Java的标识符有以下几个区别: 1. 关键字C语言和Java都有一些保留的关键字,这些关键字在代码有特殊的含义,不能作为标识符使用。但是C语言和Java的关键字并不完全相同,所以在命名变量或函数时要注意不要使用这些关键字。 2. 大小写敏感性:C语言是大小写敏感的,而Java是大小写不敏感的。这意味着在C语言,区分大小写的标识符是不同的,而在Java,不区分大小写的标识符被视为相同的。 3. 标识符长度:C语言标识符长度没有限制,可以是任意长度的字符串。而Java标识符长度最多只能是65535个字符。 4. 开头字符:在C语言标识符的第一个字符必须是字母或下划线(_),后续字符可以是字母、数字或下划线。而在Java标识符的第一个字符必须是字母,可以是大小写字母,后续字符可以是字母、数字或下划线。 5. 保留字:在Java,有一些额外的保留字,这些保留字虽然在当前版本的Java没有特殊的用途,但是它们不能作为标识符使用。 综上所述,C语言和Java的标识符关键字、大小写敏感性、标识符长度、开头字符和保留字等方面都有一些区别。在编写代码时,我们需要遵守相应语言的标识符规则,以避免出现语法错误。 ### 回答3: C语言和Java都是常见的编程语言,它们有一些相似之处,但在标识符方面也存在一些区别。 首先,C语言和Java标识符的命名规则略有不同。在C语言标识符可以由字母、数字和下划线组成,并且必须以字母或下划线开头。另外,C语言对于标识符的大小写是敏感的,因此大小写不同的标识符被视为不同的标识符。而在Java标识符也可以由字母、数字和下划线组成,但必须以字母开头,并且对大小写不敏感。这意味着在Java,大小写不同的标识符被视为相同的标识符。 其次,C语言和Java的关键字不同。C语言和Java都有自己的一组关键字,这些关键字具有特殊的意义,不能用作标识符C语言关键字包括"if"、"else"、"for"等,而Java的关键字则包括"if"、"else"、"for"等,虽然有一些相同,但也有一些不同的关键字。 最后,C语言和Java在标识符的命名习惯上也有一些差异。在C语言,通常使用下划线作为多个单词的分隔符,例如"my_variable"。而在Java,通常使用驼峰命名法(CamelCase)将多个单词连接在一起,其每个单词的首字母大写,例如"myVariable"。 总而言之,C语言和Java在标识符方面存在一些区别。这些区别包括命名规则、关键字和命名习惯。了解和掌握这些区别对于在C语言和Java编写规范和清晰的代码是非常重要的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值