美文网首页我爱编程
09预处理&枚举&静态变量

09预处理&枚举&静态变量

作者: 忘带充电宝de皮卡丘 | 来源:发表于2018-05-28 18:18 被阅读0次

    预处理

    任何一个应用程序编译的第一步就是“预处理”

    “预处理”阶段,会将所有#开头的预处理指令处理掉

    一丶宏定义

    方式一:#define 宏名

    ​ 方式一 通常和#ifndef配合使用

    方式二:#define 宏名 值

    方式三:#define 带参宏 值

    例子:

    #define add(a,b) a+b
    int x=add(10, 20);
    

    ​ [注] 所谓的宏替换,只是纯粹的字符串的替换

    ​ [注] 预处理阶段不会做任何的数学运算

    二丶条件编译

    #ifndef  XXX_H
    #define  XXX_H
    ......
    #endif
    

    ​ [注] 条件编译作用:为了防止头文件被重复包含

    三丶typedef关键字的使用

    int a;//定义一个普通变量
    typedef int a;//定义新类型,a就是新类型名,使用a就可以像使用int一样定义整型变量
    unsigned long x;
    typedef unsigned long width;
    width x;//==unsigned long x;
    

    ​ [注] 使用typedef关键字,定义新类型名,新类型名更加简短,更有内涵,更适合当前程序

    枚举

    C语言中的枚举是用来定义多个常量的

    一丶枚举的定义

    enum color {RED,BLUE=10,GREEN};
    //默认枚举列表中每个枚举项的值是从0开始的
    

    二丶枚举的使用

    printf("%d\n",RED);
    printf("%d\n",BLUE);
    printf("%d\n",GREEN);
    enum color e;
    e=10; 
    

    静态变量

    一丶静态局部变量

    ​ 在一个局部变量定义时用static修饰,这个局部变量立即变为静态变量

    ​ 静态局部变量会存储在[数据区],[数据区]中的数据在main开始执行前就存在,在main调用结束之后才消失

    void foo(void)
    {
        int a;//普通局部变量
        static int b;//静态局部变量
    }
    
    void foo(void)
    {
        static int a=0;//静态变量只会在main函数执行之前做一次初始化
        a++;
        printf("%d\n",a);
    }
    
    int main(int argc, const char * argv[])
    {
        foo();//1
        foo();//2
        foo();//3
        foo();//4
        return 0;
    }
    

    二丶静态全局变量

    ​ 在一个全局变量定义时用static修饰,这个全局变量立即变为静态变量

    ​ [区别] 静态全局变量定义在所有函数之外

    ​ 静态全局变量也只会初始化一次,也是在main函数开始执行之前做初始化动作,也是存储在[数据区]

    相关文章

      网友评论

        本文标题:09预处理&枚举&静态变量

        本文链接:https://www.haomeiwen.com/subject/wuzgjftx.html