C语言预处理指令

1、宏定义
一、不带参数的宏

     /**宏命令 预处理指令*/
     //1、不带参数的宏
      #define COUNT 4

       char chars[COUNT]={'a','b','c','d'};

       for (int var = 0; var < COUNT; var++) {

           printf("%c",chars[var]);


    }
       printf("\n");
      #undef COUNT;//结束宏定义

//      printf("count:%d",COUNT);//不能识别

二、带参数的宏

      //2、带参数的宏
      #define  sum(a,b) ((a)+(b))

      #define  ji(x) ((x)*(x))//注意加上小括号,否则对于复杂的四则运算容易出错


        int result= sum(1,ji(5));

        printf("result:%d\n",result);

2、条件编译

       //条件编译

    #define  COUNT 9

     #ifdef COUNT
        printf("定义了count!\n");

     #else
        printf("没有定义了count!\n");

     #endif


    #undef COUNT
    #ifndef COUNT
        printf("没有定义了count!\n");

    #endif

        /**
     * 定义了count!
       没有定义了count!
     * */

   //文件包含 防止重复编译头文件
    //例如:test.h 系统会自带文件宏定义和条件编译 防止重复包含,重复编译

    #ifndef TEST_H
    #define TEST_H //定义一个空文件


    #endif

3、typedef

一、数据类型

     //typedef
    typedef int Myint;//基本数据类型
     Myint a=12;

    typedef char * String;//char 数组
    String name="lili";

    //结构体
    /**
    struct Person
    {

        int age;
        String name;
    };

    typedef struct person  Myperson;*/

    //可以精简为下面这种写法
    typedef struct Person
    {
        int age;
        String name;

    } Myperson;

    Myperson mp={22,"lilei"};

    //结构体方式二   有上面的观察可以发现 Person完全没有必要写,下面这种更精简的方式


    typedef struct
    {
        int age;
        int code;
        String name;

    } MyStudent;

    MyStudent ms={27,100,"wei"};

    //结构体指针

    //正常的写法
      /**struct Person2
        {
            int age;
            String name;


        };

     struct Person2 *  pp;*/

   //typedef写法
    typedef struct Person2
    {
        int age;
        String name;


    } * personPoint;

    struct Person2 p2={20,"zhizhen"};

    personPoint pp=&p2;

       //枚举

    enum Sex{man,woman};

    typedef enum Sex MySex;

    typedef enum Season
    {
        Spring,
        summr,
        autuom,
        winter


    } MySeason;


    MySex msex=man;

    MySeason msn=winter;

    printf("myint :%d\n",a);
    printf("String:%s\n",name);
    printf("myperson:name:%s\tage:%d\n",mp.name,mp.age);
    printf("mystudent:name:%s\tage:%d\tcode:%d\n",ms.name,ms.age,ms.code);
    printf("personPoint:name:%s\tage:%d\n",(*pp).name,(*pp).age);


//结果:
//    myint :12
//    String:lili
//    myperson:name:lilei   age:22
//    mystudent:name:wei    age:27  code:100
//    personPoint:name:zhizhen  age:20

二、函数

    //函数
    int (*Mycount)(int,int);

     Mycount=&sum;

     printf("%d\n",Mycount(10,18));

     Mycount=&minus;

     printf("%d\n",Mycount(10,18));

     //typedef 写法

     typedef int (*NewMycount)(int,int);

     NewMycount nsum=sum;
     NewMycount nminus=minus;
     printf("%d\n",nsum(10,18));
     printf("%d\n",nminus(10,18));

//     28
//     -8
//     28
//     -8

4、typedef 注意事项

 //typedef注意事项



     typedef char * String;

     #define String2 char *


     String s1,s2;//s1,s2都为char * 类型

     s1="jim";
     s2="lili";

     String2 s3,s4;

     s3="leifeng";

//     s4="lilei";这句报错了  为啥呢?
//       提示:char 类型不能转换为 char *,不对啊?s4 不应该是char * 类型么? 这是 因为宏定义 是这样替换的

     /***
      * String2 s3,s4 ----> char * s3,s4;  仅只有s3是char *类型
      *
      *
      * /
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值