预处理指令define和undef

预处理指令define和undefdefine 是由预处理器进行处理的 预处理指令以 号开头以区分其它语句 因只有一行末尾不需要以 分号结束 definePRICE3 2intmain intnum 100 floattotal PRICE num 预处理后将替换为 floattotal 3 2 num return0 其形式为 define 宏替换体宏函数一 替换体前带 号 号将会以双引号把替

#define是由预处理器进行处理的。预处理指令以#号开头以区分其它语句,因只有一行末尾不需要以;分号结束。

#define PRICE 3.2

int main(){

        int num = 100;

        float total = PRICE * num; //预处理后将替换为 float total = 3.2 * num;

        return 0;

}

其形式为:#define  替换体 


宏函数

一、替换体前带#号,#号将会以双引号把替换体包括起来,变成字符串

#define ATM(MONEY) “您帐户的 “#MONEY” 剩余%d元\n”

int main(){

    //替换体前加#号,#号将被处理为双引号把替换体包括

    int num = 1234;

    printf(ATM(MONEY), num); //展开为 “您帐户的 “MONEY” 剩余%d元\n” //相邻的两个字符串会连在一起成为一个字符串

    return 0;

}

运行结果为:您帐户的 MONEY 剩余1234元

 二、替换体前带号,号将会把号前后的标记连接成一个标记

#define ATM(MON, EY) MONEY //将被处理为 MONEY

int main(){

    //替换体前加号

    int MONEY = 12345;

    printf(“%d\n”, ATM(MON, EY));

    return 0;

}

运行结果:12345

三、带参数的宏函数须把替换体作为一个整体,否则可能受左右运算符、运算符优先级影响

 

#include 
   
     /* 时间:2022-05-15 19:14 作者:sgbl888 功能:宏函数 */ #define SQUARE(n) n*n #undef SQUARE //取消上面的宏定义 #define SQUARE(n) (n)*(n) //21行如果用这个宏函数就正确了,展开为(n+2)*(n+2)=16 #undef SQUARE #define SQUARE(n) (n*n) //第22行如果用这个宏函数就正确了,展开为100/(n*n)=25 #undef SQUARE #define SQUARE(n) ((n)*(n)) //用这个宏函数下面几条语句打印出的结果均是正确的。 int main(){ int n = 2; printf("%d\n", SQUARE(n)); //展开为n*n = 2*2 =4 ,符合预期 printf("%d\n", SQUARE(n+2)); //展开为n+2*n+2 = 8,并不是预期的16。因先算乘法再算加法 printf("%d\n", 100/SQUARE(n)); //展开为100/n*n= 100,并不是预期的25,因除法和乘法优先级是一样的 return 0; } 
   

取消宏定义 

直接用 #undef 宏取可

如:

#define ATM(MON, EY) MON#EY

#undef ATM(MON, EY) //取消宏定义了 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/203221.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午10:19
下一篇 2026年3月19日 下午10:19


相关推荐

  • idea2021 激活码【中文破解版】

    (idea2021 激活码)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~S32P…

    2022年3月26日
    44
  • eXtremeComponents安装配置

    eXtremeComponents安装配置eXtremeComponents直接下载地址http://sourceforge.net/projects/extremecomp/中文文档:http://lanxin1985.javaeye.

    2022年7月2日
    29
  • pycharm手动导入库

    pycharm手动导入库1 在阿里镜像中下载相应的类库 whl 以安装 scrapy 库为例 http mirrors aliyun com pypi simple scrapy 2 把 whl 文件放在 C 3 cmd 窗口输入 python mpipinstall upgradepip 更新 pippipinstal Scrapy 2 4 0 py2 py3 none any whl 安装已经下载的第三方库 一次不成功 重复多次 4 file gt setting 如图点击 搜索第三方库 in

    2026年3月17日
    2
  • Python中eval()函数的使用

    Python中eval()函数的使用今天给大家分享一下 Python 中的 eval 函数 如果感觉博主的文章还不错的话 希望大家点赞支持一下博主文章目录 eval 函数语法实例实例 1 实例 2 实例 3eval 函数 eval 函数用来执行一个字符串表达式 并返回表达式的值 语法 eval expression globals locals expression 表达式 globals 变量作用域 全局命名空间 如果被提供 则必须是一个字典对象 locals 变量作用域 局部命名空间 如果被提供 可以是任何映

    2026年3月17日
    3
  • Java中如何保留小数点后几位数字

    Java中如何保留小数点后几位数字保留小数点后固定位数的方法

    2026年3月19日
    1
  • pstack学习笔记

    pstack学习笔记################################################################################pstack学习笔记v0.12013.10.8*** 简介:pstack的功能是显示当前进程中函数的调用栈的关系,若是多线程的情况下,会显示各个      线程中函数调用的关系。 

    2025年11月16日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号