zoukankan      html  css  js  c++  java
  • 预处理命令--宏定义

    /*预处理命令--宏定义*/

        //宏名一般习惯用大写字母表示

        //使用宏可以减少再程序中重复书写某些繁琐字符的工作量,避免不必要的错误

        //宏定义只是简单地替换,不做正确性检查

        //宏定义末尾不必加分号

        //宏定义的有效范围是,宏定义之后到本源文件结束

        //宏定义可以引用已经定义的宏,层层替换

        //程序中在""中的字符即使与宏名相同也不进行替换

        //宏定义只做字符替换,不分配内存

        //宏替换不占用运行时间,只占用编译时间

        

        /*宏定义的一般格式*/

        //#define 宏名 需要替换地字符串

        

        /*带参地宏定义*/

        //#define 宏名(参数表) 需要替换地字符

        

        //带参宏的展开只是将语句中的宏名后面的实参字符串代替#define命令行中的形参

        //宏名和参数表的括号之间没有空格

        //宏名无类型、参数也无类型只是一个符号代表

        

        /*以下是两个宏的列子*/

        

        //用宏定义一年中有多少秒

        #define SECONDINAYEAR (365*24*60*60)  

        printf("SECONDINAYEAR = %d ",SECONDINAYEAR);

        //定义一个标准宏 MAX 表示输入两个参数XY,返回其中较大者

        

        #define MAX(A,B) ((A) > (B) ? (A) : (B))

        printf("MAX = %d ",MAX(5, 6));

        //但是这个宏有副作用,如下

        int a[10];

        for (int i = 0; i<10; i++) {

            a[i] = i+1;

        }

        int b = 10;

        int *p = &a[0];

        int max = MAX(*p++, b);

        printf("max = %d",max);

        //相当于

        //max = ((*p++) >= (b) ? (*p++) : (b));//这里将指针变量p进行了一次自加,最终p指向数组中的下一元素即a[1]=2

        printf("*p = %d",*p);//在这里会输出2,数组中第一个元素

        

        //注意在使用宏时小心地使用括号

  • 相关阅读:
    为什么数据库连接很消耗资源 转
    在Eclipse中编写servlet时出现"The import javax.servlet cannot be resolved" 问题解决办法
    multipart/form-data post 方法提交表单,后台获取不到数据
    java 数据库查询Date类型字段 没有了时分秒 全为 00 的解决办法
    Eclipse/myEclipse 代码提示/自动提示/自动完成设置(转)
    PL/SQL破解方法(不需要注册码)
    Java
    tomcat开发环境配置
    文件操作权限
    Java版office文档在线预览
  • 原文地址:https://www.cnblogs.com/chenhaosuibi/p/3439629.html
Copyright © 2011-2022 走看看