C-8 关键字

1.关键字是C 语言提供的,不能由自己创建。

2.变量名不能是关键字。

=========================================================================

auto

auto是自动的,每个局部变量都是auto修饰的。

int main()

{

    auto int a = 10;   //是自动创建,自动销毁的。是自动变量,一般省略。

    return 0;

}

因为自动变量都是有 auto 的,所以就省略掉了

当然 auto 在新的C语言语法中也有新的用法,这里先不做讨论。

=========================================================================

register

在 C 语言中,register是一个关键字,用于声明一个变量为寄存器变量。

寄存器变量是指要求编译器将变量存储在 CPU 的寄存器中而不是在内存中的变量寄存器存储器的访问速度比内存快得多,这对于需要频繁访问的变量来说可以提高程序的性能。但是,由于寄存器的数量是有限制的,编译器不一定会将变量存储在寄存器中,也就是说,即使使用了register,最终变量是不是存到CPU都是由电脑自己决定。它可能会忽略 register 关键字。因此 register 关键字并不一定会提高程序的性能,而且在现代编译器中也可能已经被优化掉了。

register int x;
 

这将声明一个整数变量 x,要求编译器将其存储在 CPU 的寄存器中。注意,使用 register 关键字并不会影响变量的作用域或存储类型它只是一个提示编译器将该变量存储在寄存器中的建议。

=========================================================================

typedef

在 C 语言中, typedef 是一个关键字,用于定义不同的数据类型名称。typedef 可以帮助程序员改善程序的可读性,并简化代码使用 typedef 可以将一个现有数据类型定义为一个新的数据类型,并为该新类型指定一个名称,例如:

typedef unsigned long ulong;
 

以上代码将 unsigned long 定义为 uling 数据类型。这意味着在程序中可以使用 ulong 来代替 unsigned long,例如:

ulong x;
 

上面的代码等同于:

unsigned long x;
 

=========================================================================

static

static修饰局部变量

#include<stdio.h>

void test()
{
    int a = 0;
    a++;
    printf("%d",a);
}

int main()
{
    int i = 0;
    while (i<10)
    {
         test();
         i++;
    }
    return 0;
}

在这段函数中,从主函数 int main() 进入,变量 i=0,符合 i<0 进入 while 循环。

在 while 循环中首先进入 test 函数中。

在函数中a初始值为0,随后 a++ 变为 1 接着打印得到 1 后离开函数。

i++后仍然小于10,接着循环,直至 i=10 ,代码结束。

最终得到打印的结果是 2222222222

而当我们加入static关键字发生一些改变,结果会截然不同。

​
#include<stdio.h>

void test()
{
    static int a = 0;
    a++;
    printf("%d",a);
}

int main()
{
    int i = 0;
    while (i<10)
    {
         test();
         i++;
    }
    return 0;
}

​

这时的输出结果就会变为 2 3 4 5 6 7 8 9 10 11
结果不同的关键原因在于 static 对于局部变量的修饰,他改变了局部变量的生命周期,使得在代码走出函数后,函数中的变量a没有被销毁而保留了下来,等到下一次循环再次进入函数时以上次循环留下的a的值再次运算。

而他的本质是改变了变量的存储类型

数据的存储类型分为栈区、堆区和静态区

栈区中存储的是局部变量和函数的参数,堆区是静态内存分配的,静态区是全局变量和static修饰的静态变量。

---------------------------------------------------------------------------------------------------------------------------------

static修饰全局变量

在C/C++中,使用静态关键字static修饰全局变量时,它的作用域仅限于定义该变量的源文件,也就是说,其它源文件无法访问该变量,从而避免了命名冲突问题。

此外,静态全局变量的存储类别为静态存储类别,其生命周期与整个程序执行期间相同,在程序一开始就会被初始化为0或NULL,只会被初始化一次,不会被销毁,在程序结束后才会被释放。因此,使用静态全局变量可以在整个程序执行期间有效保存该变量的值。

例如,以下示例代码定义了一个静态全局变量count:

// 文件 a.c
static int count = 0;

在另一个源文件b.c中,无法访问变量count,会编译报错:

// 文件 b.c
void func()
{
    count++; // 编译报错: 未声明的标识符
}

全局变量在其他源文件内部可以被使用,是因为全局变量具有外部链接属性。

但是被 static 修饰后,就变成了内部链接属性,其他源文件就不能链接到这个静态的局部变量了。

---------------------------------------------------------------------------------------------------------------------------------

static修饰函数

//文件 add.c

static int Add(int x,int y)
{
    return x + y;
}
//文件test.c

#include<stdio.h>

extern int Add(int x,int y);

int main()
{
    int a = 10;
    int b = 20;
    int sum = Add(a,b);
    printf("sum = %d\n",sum);

    return 0;
}
//无法解析的外部符号

static 修饰函数,使得函数只能在自己所在的源文件内部使用,不能在其他源文件内部使用。

本质上 static 是将函数的外部链接属性变成了内部链接属性,和 static 修饰全局变量一样。

=========================================================================

extern

例如,我们在 文件a.c 中声明了一个变量x为 extern 类型:

// a.c文件中
extern int x;
 

这里的 extern 关键字告诉编译器,变量x在本文件中只是声明,它的定义在其他文件中,需要在程序链接时进行链接。

在文件 b.c 中,定义了变量x: 

// b.c文件中
int x = 10;
 

此时,变量x的定义已经出现在了程序中。在最终链接过程中,编译器会将 a.c 和 b.c 两个源文件中的符号都进行统一的链接,从而使得 a.c 中声明的 extern 类型的变量x能够与 b.c 中定义的变量x建立起联系,完成变量的定义。

=========================================================================

C语言中还有很多其他关键字,如变量的各种类型 int char 等等,也有一些 break continue 等关键字会放到循环中一并讲解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言是一种广泛应用于系统软件和应用程序开发的编程语言。它有包括32个关键字在内的一些固定的标识符,这些关键字在编程中有着特殊的含义和用法。 下面是这些关键字的含义及用法的简要介绍: 1. auto:该关键字用于定义自动变量,它在函数内部声明的变量默认为自动变量。 2. break:用于中断循环或开关语句的执行。 3. case:用于定义开关语句中的某个具体情况。 4. char:用于声明字符变量。 5. const:用于定义常量,其值不能被修改。 6. continue:用于跳过循环中剩余的语句,继续执行下一次迭代。 7. default:定义开关语句中的默认情况。 8. do:开始一个do-while循环。 9. double:声明双精度浮点数变量。 10. else:用于在条件不满足时执行的分支。 11. enum:用于定义一个枚举类型。 12. extern:用于声明外部变量或函数。 13. float:声明浮点数变量。 14. for:开始一个for循环。 15. goto:用于无条件跳转到代码中的标记处。 16. if:用于条件判断,执行分支。 17. int:声明整数变量。 18. long:声明长整数变量。 19. register:用于声明寄存器变量。 20. return:用于从函数中返回一个值。 21. short:声明短整数变量。 22. signed:声明有符号整数类型。 23. sizeof:返回变量或数据类型的大小。 24. static:用于定义静态变量或函数。 25. struct:用于定义结构体类型。 26. switch:开始一个开关语句。 27. typedef:用于定义新的数据类型。 28. union:用于定义联合类型。 29. unsigned:声明无符号整数类型。 30. void:用于声明无返回值的函数或空指针。 31. volatile:用于声明易变的变量。 32. while:开始一个while循环。 这些关键字的理解和正确使用对于编写高效、可读性强的C语言代码至关重要。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值