• C/C++(预处理)


    预处理

    常量的存在形式之一。

    #define PI 3.14242
                42434
    //续行符\,标识一行
    

    缺点:

    #define N 2+3
    //#define N (2+3)
    int main()
    {
        printf("N = %d
    ",N);
        printf("N*2 = %d
    ",N*2);//8,相当于2+3*2,仅仅只是替换,遇到优先级高的先算优先级高的。
    }
    

    带参宏(宏函数)

    将短小精悍的函数进行宏化,这样可以嵌入到代码中,减少调用的开销。但是代价就是编译出的文件可能变化大。
    宏函数常常一行表达不完,如多行,为了形式上的方便,多采用续行付接续。

    #define S(a,b) a+b
    //S后面不能有空格
    int main()
    {
        printf("S(1,2) = %d
    ",S(1,2));// 3
    }
    
    #define S(a,b) ((a)*(b))
    //是严格意义上的替换,作为一个整体较好
    #define Max(a,b) ((a)>(b)?(a):(b))
    //这种短小精悍的代码
    int main()
    {
        printf("S(2+3,4+5) = %d
    ",S(2+3,4+5));//45
        return 0; 
    }
    

    演技高超的替身演员,一定要用替换后的代码看待,不要把宏当作真真的函数

    取消宏

    #define PI 3.14 //定义
    ....
    
    #undef PI //取消
    

    条件编译

    一句条件决定是否参与编译

    //整体上是双路
    #if 0
    //不执行部分
    #else
    //执行部分
    #endif
    
    // 双路组合
    #define X86     1
    #define MIPS    2
    #define POWERPC 3
    
    #ifdef X86
    //...
    #ifndef MIPS
    //...
    #else 
    //...
    #endif
    
    #define X86     1
    #define MIPS    2
    #define POWERPC 3
    #define MACHINE X86
    #if MACHINE == X86
    //...
    #elif MACHINE == MIPS
    //...
    #elif MACHINE == POWERPC
    //...
    #endif
    
    //以后只需修改MCHNIE即可。
    

    头文件包含(#include)

    包含:全写入,被包含的文件中。
    "<stdio.h>"这种是系统指定路径中所包含的头文件。
    "myString.h" 自己所使用的由自己所写的库

    ""先到当前路径下找,找不到再到系统路径下找。

    多文件编程

    优点:

    方便管理。协同开发,
    便于分享与加密(做成函数库)
    前提:
    c语言是以文件为单位进行编译的,编译器只需要函数声明即可,连接简短提供实现就可以万册灰姑娘可执行文件。
    文件可分为单个部分:
    文件的声明部分.h文件[在此文件中写函数用到的声明,结构体声明,宏定义,函数声明]
    main.c
    实现过程[函数具体实现功能]

    文件声明.h

    #ifndef __MY_LIST_H__//如果没有定义,则定义,避免重复定义
    #define __MY_LIST_H__
    ...声明部分
    
    #endif
    

    文件的具体实现.c
    自包含:

    #include "xxx.h"
    //1.类型的需要
    //2.函数间调用相互调用省略了前向声明
    

    main.:
    谁用谁包含:

    #include "xxx.h"
    
    ...
    

    多文件的编译

    其它总结

    int main()
    {
        char buf[] = "China" "is" "great";
        pritnf("%s
    ",buf);
    
        return 0;
    }
    
    #define str(x) "aaxbb"
    
    //#define str(x) "aa"#x"bb" //这样可以
    int main()
    {
        printf("%s
    ",str(1));
        printf("%s
    ",str(2));
        printf("%s
    ",str(3));
        //无法替换
        return 0;
    }
    
    

    用途:

    #define printSqr(x) printf("sqr("#x") = %d
    ",x*x);
    
    int main()
    {
        printSqr(5);
    }
    

    "##"运算黏合

    #define S(a,b) aa+bb
    //#define S(a,b) a##b+b##b
    int main()
    {
        printf("%d
    ",S(1,2));
    
        return 0;
    }
    

    eg:

    #define X(n) X##n
    int main()
    {
        int X(1) = 10;
        int X(2) = 20;
    
        printf("x1 = %d x2 = %d
    ",x1,x2);
    //x1 = 10,x2 = 20
        return 0;
    }
    

    预定义宏

    打印日志的时候比较有用

    #include <stdio.h>
    #include <stdlib.h>
    void why_me();
    int main()
    {
        printf( "The file is%s.
    ",__FILE__); // _ _
        printf( "The date is %s.
    ",__DATE__);
        printf( "The time is %s.
    ",__TIME__);
        printf( "This is line %d.
    ",__LINE__);
        printf( "This function is %s.
    ",__func__);
        why_me();
        return 0;
    }
    void why_me()
    {
        printf( "This function is %s
    ",__func__);
        printf( "The file is %s.
    ",__FILE__);
        printf( "This is line %d.
    ",__LINE__);
    }
    
    
  • 相关阅读:
    keepalive高可用集群(nginx)
    nginx负载均衡
    linux-------lnmp安装
    nginx编译安装
    Django+MySQL安装配置详解(Linux)[更新为1.8.2版]
    linux性能监控——CPU、Memory、IO、Network
    linux 时钟时间,用户CPU时间,系统CPU时间 .
    指针用作传出参数时,需要二级指针
    僵尸进程&孤儿进程
    XHProf是一个分层PHP性能分析工具。
  • 原文地址:https://www.cnblogs.com/intelwisd/p/8433924.html
Copyright © 2020-2023  润新知