C语言--4.typedef,static,extern三个关键字

本文详细解读C语言中的typedef、static和extern关键字,包括它们在局部变量、全局变量和函数上的不同作用,以及如何避免滥用typedef。通过实例演示了这三个关键字的实际运用及其对代码组织的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在C语言中,我们会学到一些内置的关键字,这些关键字在c语言中具有特殊意义,尽量不用来做变量名

下面我们来介绍一下C语言中32个关键字,着重介绍3个重要的关键字,让我们一起来了解下他们吧!

c语言中一共具有32个关键字:

auto     break      case     char     const      continue     default     do     double     else     enum  
extern    float     for     goto     if      int      long     register      return     short     signed
sizeof     static   struct     switch     typedef union     unsigned     void     volatile     while
 
 

关键字 typedef

 
typedef 顾名思义是类型定义,可以理解为类型的重命名 
typedef unsigned int ui;//用关键字typedef 将原来复杂的类型名换为简单的ui
int main()
{
    //num1和num2,这两个变量的类型是一样的
    unsigned int num1 = 0;
    ui num2 = 0;
    return 0; }

 通常情况下typedef都是配合函数,结构体等复杂结构使用

注意:不能滥用typedef,写程序的初衷是将复杂的问题简单化,而不是将简单的问题复杂化

 

关键字 static

关键字static有三个修饰的对象:局部变量,全局变量,函数

1. 修饰局部变量 - 静态局部变量
2. 修饰全局变量 - 静态全局变量
3. 修饰函数 - 静态函数

 

static修饰局部变量

#include <stdio.h>
void test()
{
    int i = 0;
    i++;
    printf("%d ", i);
}
int main()
{
 int i = 0;
    for(i=0; i<10; i++)
   {
        test();//打印结果为十个 1
   }
    return 0; }

以上代码我们不难发现,当定义一个局部变量并在局部对其操作时,由于局部变量的临时性,当该变量进入代码被定义块开辟空间,当该变量退出代码块时被销毁释放空间,所以上面的代码每重新调运一次test函数,i都会被重新定义一次,所以每次都是从0自增到1

#include <stdio.h>
void test()
{
    //static修饰局部变量
    static int i = 0;
    i++;
    printf("%d ", i);
}
int main()
{
 int i = 0;
    for(i=0; i<10; i++)
   {
        test();//从1到10
   }
    return 0; }

那么我们给局部变量i添加一个static关键字呢?

不难发现,输出结果就变成了从1到10;完成了10次自增,对于这个程序,我们可以理解为,当这个函数被调用完了,在static的修饰下局部变量i并没有被释放掉,事实上是static关键字修饰局部变量,将该局部变量的生命周期改为全局!(所以i的定义只有最初的1次,之后的调用都是调用定义过的,而不是像原来一样重新定义),值得注意的是,但是其作用域不改变!

static修饰全局变量

static也可以用于修饰全局变量,首先问哦们来明确一下全局变量的含义,全局变量指的是此变量在整个程序中(不是单一源文件)都有作用效果,只不过在其他文件想要使用时需要对其进行声明

而我们的static修饰全局变量起到的效果就是,将原来作用域是整个文件的全局变量的作用域变为单一源文件(指只在定义那个变量的源文件中才可以使用)

//add.c
int g_val = 2018;//在add.c中定义变量g_val
//test.c
int main()
{

    printf("%d\n", g_val);//在test.c中可以进行访问
    return 0; }
//代码2
//add.c
static int g_val = 2018;//在add.c中定义的static修饰的变量
//test.c
int main()
{
    printf("%d\n", g_val);//在test.c中无法被访问到
    return 0; }

总结起来就是:static修饰全局变量意味着该变量只在本文件内被使用

static修饰函数

函数可以在别的源文件中定义,在main函数中进行调用,虽然不需要声明也可以对函数进行调用,但是这并不是好的编码习惯,建议将在别的源文件中定义的函数在本文件中用extern+函数的返回值+函数得函数名+函数的形参列表(除去函数体的其他部分)进行声明,总结:函数在一个文件中被定义,在其他文件中可以直接调用,这是c语言多文件编程的基础

而利用static修饰函数则代表该函数只在本文件内有效

//add.c
int Add(int x, int y) {//在add.c中进行函数的定义
    return c+y; 
}
//test.c
int main()
{
    printf("%d\n", Add(2, 3));//在test.c中进行函数的调用
    return 0; }
//代码2
//add.c
static int Add(int x, int y) {//在add.c中进行函数的static修饰
    return c+y; }
//test.c
int main()
{
    printf("%d\n", Add(2, 3));//在test.c中则无法进行使用,只在add.c中有效
    return 0; }

extern关键字

extern关键字的作用是指对于变量或者函数的声明,首先我们先来明确两组概念,定义与声明,定义的本质是指在内存中开辟对应数据类型的空间大小去定义这个变量,定义的关键是要在内存中开辟空间,而声明则是在文件中用extern+数据类型+数据名称的形式来对已定义的变量或者函数进行一种“广而告之”的声明,其在程序中并不会进行新的空间开辟,所以在声明时无法对变量进行赋值,变量或函数只会被定义一次,而声明则可以有无数次

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值