预处理&枚举&其他

预处理&枚举&其他

预处理

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

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

一.宏定义

  方式一:#define  宏名

  方式二:#define  宏名  值

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

  方式三:#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
",RED);
    printf("%d
",BLUE);
    printf("%d
",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
",a);
}

int main(int argc, const char * argv[])
{
    foo();//1
    foo();//2
    foo();//3
    foo();//4
    return 0;
}

  静态全局变量

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

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

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

原文地址:https://www.cnblogs.com/firstsky/p/5892389.html