zoukankan      html  css  js  c++  java
  • 宏与函数

    /**
    *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;
    }
  • 相关阅读:
    SQL查询
    redis 命令行常用命令
    linux ss ip
    jdk下载地址
    requests.session保持会话
    Python通过重写sys.stdout将控制台日志重定向到文件
    解决Python3 控制台输出InsecureRequestWarning问题
    uniapp实现iframe效果
    模拟登录 react 的页面
    vueX的五大属性和使用方法包括辅助函数
  • 原文地址:https://www.cnblogs.com/zzyoucan/p/4198443.html
Copyright © 2011-2022 走看看