• C语言——预处理指令、typedef、static、递归


     

    一、预处理指令(所有的预处理指令都是以#开头)

          1、 预处理指令分类

                 ①  宏定义

                 ②  条件编译

                 ③  文件包含

          2、预处理指令在代码翻译成0和1之前执行

          3、预处理的位置是随便写的

          4、作用域:从编写指令的那一行开始,一直到文件结尾,可以用#undef取消宏定义的作用

          (一)、宏

              宏名一般用大写或者以k开头,变量名一般用小写

             好处:宏的定义比函数的效率要高一些          

     1 #include <stdio.h>
     2 
     3 int main()
     4 {
     5     char *name = "COUNT";
     6     
     7     printf("%s
    ", name);
     8     
     9     #define COUNT 4//定义宏
    10     
    11     int ages[COUNT] = {1, 2, 67, 89};
    12     
    13     
    14     
    15     for ( int i = 0; i<COUNT; i++) {
    16         printf("%d
    ", ages[i]);
    17     }
    18     
    19     // 从这行开始,COUNT这个宏就失效
    20 #undef COUNT

        (二)、条件编译

                当我们希望部分代码只有满足一定条件时候才进行编译,否则不参与编译。这就是条件编译。

                 

     1 #include <stdio.h>
     2 
     3 
     4 // 只要写了#if,在最后面必须加上#endif
     5 int main()
     6 {
     7 #ifndef A//条件编译
     8 
     9     printf("条件编译
    ");
    10 #endif
    11     return 0;
    12 }

           如上,如果满足条件A,就编译输出“条件编译”,否则,这部分代码不参与编译,直接到达return 0

           (三)、 文件包含

                 同之前的include同文件的用法相同。

    二、 typedef

          1、 作用:给已经存在的类型起一个新的名称

          2、 使用场合:

                     ①  基本数据类型

                    

    1 typedef int MyInt;
    2 typedef MyInt MyInt2;

                     ②  指针

    1 // 给指针类型char *起一个新的类型名称String
    2 typedef char * String;

                     ③  结构体

    1     typedef struct Person
    2     {
    3         int age;
    4     } * PersonPoint;
    5     // 定义结构体变量
    6     struct Person p = {20};
    7     
    8     PersonPoint p2 = &p;
    9     

                     ④  枚举

    1 typedef enum {
    2     Man,
    3     Woman
    4 } MySex;

     

                     ⑤ 指向函数的指针

     1 typedef int (*MyPoint)(int, int);
     2 
     3 int minus(int a, int b)
     4 {
     5     return a - b;
     6 }
     7 
     8 int sum(int a, int b)
     9 {
    10     return a + b;
    11 }

    三、 static和extern

         1、外部函数:定义的函数能被本文件和其他文件访问

             ①  默认情况下所有函数都是外部函数

             ②  不允许有同名的外部函数

           extern对函数的作用:

             ①  完整地定义一个外部函数

             ②  完整地声明一个外部函数

     (extern可以省略,默认情况下声明和定义的函数都是外部函数)

    1 extern void test();

        2、 内部函数:定义的函数只能被本文件访问,其他文件不能访问

             ① 允许不同文件中有同名的内部函数

              static对函数的作用:

             ①  定义一个内部函数

             ②  声明一个内部函数

    1 static void test2()
    2 {
    3     
    4 }

      3、static对局部变量的作用

            static修饰局部变量的使用场合:

              ①  如果某个函数的调用频率特别高

              ②  这个函数内部的某个变量值是固定不变的

            static修饰局部变量:

              ①  延长局部变量的生命周期:程序结束的时候,局部变量才会被销毁

              ②  并没有改变局部变量的作用域

     1 #include <stdio.h>
     2 
     3 int main()
     4 {
     5     static double pi = 3.14;
     6     
     7     double zc = 2 * pi * 10;
     8     
     9     int a = 0;
    10     a++;
    11     printf("a的值是%d
    ", a); // 1
    12     static int b = 0;
    13     b++;
    14     printf("b的值是%d
    ", b); // 3
    15 
    16     return 0;
    17 }

    四、 递归

         递归的2个条件:

          1、函数自己调用自己

          2、必须有个明确的返回值

     1 //用来计算b的n次方
     2  
     3 #include <stdio.h>
     4 int pow2(int b, int n);
     5 
     6 int main()
     7 {
     8     int c = pow2(3, 2);
     9     
    10     printf("%d
    ", c);
    11     return 0;
    12 }

        

          

               

         

  • 相关阅读:
    如何上载图片到SAP数据库并显示
    ◆◆0如何查看ABAP程序或者数据库表的版本历史
    python中我认为一些重要的东西
    Pytorch使用-1
    大工具-收藏
    大想法-(收藏)
    TODO-深度学习实验
    顺便配置了下vim
    不影响已安装的低版本cuda8及其环境工具条件下安装新版本cuda9
    ConvLSTM-AE for VAD (ICME2017-SIST)
  • 原文地址:https://www.cnblogs.com/gaizuojia/p/4356931.html
Copyright © 2020-2023  润新知