zoukankan      html  css  js  c++  java
  • 预处理

    2.1文件的包含

    为了使编写的程序结构优良,更易于调试和阅读,需要灵活使用预处理。

    #include""

    #include<>

    2.2宏定义

    宏替换:在预处理阶段用预先定义的字符串代替标示符的过程

    #define 标示符  字符串

    标识符都大写

    注意:

    1宏替换不做语法检查,

    2宏替换通常在文件开头部分,用#undef命令终止宏定义的作用域。

    3不要在字符串中使用宏。

    4该加()的时候加();

    2.2.2带参数的宏替换

    #define  宏名(参数表) 字符串

    注意:

    1、宏名和参数表之间不能有空格;

    2、宏替换只做替换;

    3、函数调用在编译后程序运行时进行,分配内存,宏替换在编译前进行,不分配内存;

    4、宏的哑实结合类似于函数调用过程中实参代替形参的过程,不存在类型,也没有类型转换;

    5、宏展开使源程序边长,而函数调用则不会。

    2.2.3嵌套宏替换

    在一个宏定义中使用另外一个宏

    #define    N   3

    #define    N_CUBE  N*N*N

    #define    CUBE_ABS  ((N_CUBE >0)?(N_CUBE : -1*(N_CUBE))

    嵌套宏替换在预处理阶段进行扩展的时候是逐层进行的,以上面的CUBE_ABS为例,在已处理阶段将对其中的每个宏名进行扩展,直到没有宏名为止。

    2.3宏定义常见的错误分析

    #define  INT_P  int *

    结果在声明 的时候

    INT_P  p , p1;

    这时候P1并没有定义成我们想要的整形指针,而是一个整形变量。

    -----------------------

    #define N 10

    Printf(“N的值为%d”,N);

    报错,因为扩展后 为Printf(“N的值为%d”,N;);  多了一个; 分号

    -----------------------

    不要在字符串中用宏,否则会被编译器按照字符串来处理!

    2.3.2带参数的宏

    #define SUM(x,y) x+y
    void main()
    {
    int x=6;
    int y=9;
    int s=SUM(x,y);
    printf("x+y的值:%d",s);
    return;
    }
    输出结果:
    printf("x+y的值:15
    将代码:int s=SUM(x,y);修改为int s=SUM(x,y)*10;
    输出结果:
    printf("x+y的值:96
    为什么出错,本应该150的
    因为扩展后为int  s=x+y*10;
    将宏定义该一下:#define SUM(x,y) (x+y)
    这样就对了。
    

      

  • 相关阅读:
    wget: command not found
    小程序循环多个picker选择器,实现动态增、减
    小程序 picker 多列选择器 数据动态获取
    有关https有的网站可以访问有的访问不了的问题
    微信小程序填坑之路
    linux如何搭建sftp服务器
    微信小程序模板中使用循环
    C#学习笔记(20)——使用IComparer(自己写的)
    C#学习笔记(19)——使用IComparer(百度文库)
    C#学习笔记(18)——C#构造函数中this和base的使用
  • 原文地址:https://www.cnblogs.com/heri/p/2863634.html
Copyright © 2011-2022 走看看