• 宏与函数


    /**
    *1.宏会在编译器在对源代码进行编译的时候进行简单替换,不会进行任何逻辑检测,即简单代码复制而已。
    2.宏进行定义时不会考虑参数的类型。
    3.参数宏的使用会使具有同一作用的代码块在目标文件中存在多个副本,即会增长目标文件的大小。
    4.参数宏的运行速度会比函数快,因为不需要参数压栈/出栈操作。
    5.参数宏在定义时要多加小心,多加括号。
    6.函数只在目标文件中存在一处,比较节省程序空间。
    7.函数的调用会牵扯到参数的传递,压栈/出栈操作,速度相对较慢。
    8.函数的参数存在传值和传地址(指针)的问题,参数宏不存在。
     */
    #include <cstdio>
    typedef struct point3d
    {
        float x;
        float y;
        float z;
    }Point3d;
    //函数方式
    //void Point3d_print(const Point3d* pd)
    //{
    //    printf("%g, %g, %g", pd->x, pd->y, pd->z);//%g 根据具体的数值选择 %e 或 %f     printf("%.2g",0.0123); ====> 0.012 效果相当于除去0后的有效位数
    //}
    
    //宏方式,对于简单的函数可以考虑使用宏,因为速度更快
    #define  Point3d_print(pd) 
        printf("%g, %g, %g", pd->x, pd->y, pd->z);
    int main()
    {
        Point3d pd = {1.01f,1.0f,1.0f};
        Point3d* p = &pd;
        Point3d_print(p);//这个还不能直接用&pd,必须自己定义一个指针,如p,这个宏有点坑吧
    
        getchar();
        return 0;
    }
  • 相关阅读:
    [专题六] 位运算
    [专题五] 二叉树
    [专题四] 并查集
    [专题三] 图论
    [专题二] 排序
    [专题一] 栈和队列
    我的最新书单
    虚拟机极简配置manjaro gnome
    运算符重载
    Manjaro kde 18.0安装与基本配置
  • 原文地址:https://www.cnblogs.com/zzyoucan/p/4198443.html
Copyright © 2020-2023  润新知