十四、常用关键字(const,typedef,static,extern,#define)

 一、const(修饰常变量)

//const 修饰的常变量
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

int main()
{
    const float pai = 3.14f;   //这里的pai是const修饰的常变量
    pai = 5.14;//是不能直接修改的!
    return 0;
}

 

二、typedef(类型重定义)

// typedef 类型定义, 类型重定义
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

typedef unsigned int U_INT;  // 将 unsigned int 重命名位 U_INT

int main()
{
    U_INT f = 30;
    printf("f = %d\n", f);   // f = 30
    return 0;
}

 

三、static(静态变量)

static是用来修饰变量和函数的
  1. 修饰局部变量-称为静态局部变量
  2. 修饰全局变量-称为静态全局变量
  3. 修饰函数-称为静态函数

3.1 修饰局部变量

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

void test()
{
    //static修饰局部变量
    static int i = 0;
    i++;
    printf("%d ", i);  // 1  2 3 4 5 6 7 8 9 10
}
int main()
{
    int i = 0;
    for (i = 0; i<10; i++)
    {
        test();
    }

    return 0;
}

3.2 修饰全局变量

//代码1
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

//add.c
int g_val = 2018;
//test.c
int main()
{
    printf("%d\n", g_val);
    return 0; 
}
//代码2
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

//add.c
static int g_val = 2018;
//test.c
int main()
{
    printf("%d\n", g_val);
    return 0; 
}

 

代码1正常,代码2在编译的时候会出现连接性错误。
一个全局变量被static修饰,使得这个全局变量只能在本源文件内使用,不能在其他源文件内使用。

3.3 修饰函数

//代码1
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

//add.c
int Add(int x, int y) 
{
    return c+y; 
}
//test.c
int main()
{
    printf("%d\n", Add(2, 3));
    return 0;
}
//代码2
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

//add.c
static int Add(int x, int y) 
{
    return c+y; 
}
//test.c
int main()
{
    printf("%d\n", Add(2, 3));
    return 0; 
}
代码1正常,代码2在编译的时候会出现连接性错误
一个函数被static修饰,使得这个函数只能在本源文件内使用,不能在其他源文件内使用。

 

四、extern(外部变量)

// add.c
int g_val = 2021;  // 全局变量

static int g_val_l = 2022;  // static 修饰全部变量
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
       // extern  声明外部符号 与 static 声明全局变量
    extern int g_val;  // 在add.c中声明就可以在这里使用
    extern int g_val_l;  // 在 add.c中用 static 修饰了全局变量, 
    // 改变了变量的作用域。 让静态的全局变量只能在自己所在的源文件内部使用, 除了源文件就不能再使用了
    printf("g_val = %d\n", g_val);
    // printf("g_val_l = %d\n", g_val_l);   报错
    
    return 0; }

五、#define(宏定义)

//define定义标识符常量
#define MAX 1000
//define定义宏
#define ADD(x, y) ((x)+(y))

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
    int sum = ADD(2, 3);
    printf("sum = %d\n", sum);  // sum = 5

    sum = 10 * ADD(2, 3);
    printf("sum = %d\n", sum);  // sum = 50

    return 0;
}

 

posted on 2021-12-30 10:58  软饭攻城狮  阅读(66)  评论(0编辑  收藏  举报

导航