找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2206|回复: 6
收起左侧

C语言能否根据需要临时改变宏定义的内容?

[复制链接]
ID:71233 发表于 2021-8-23 10:20 | 显示全部楼层 |阅读模式
有关宏定义的语法,本人是小白,不知道能否实现下面的功能:根据需要来临时改变宏定义的具体内容(引脚定义、#include等),模拟内容如下:
unsigned char X=1//选择12
#if  X=1// 如果X=1,就执行下面宏定义
sbit K1=P3^3;
sbit K2=P3^4;
#define Pout P3  #include <1.h>
#elif  X=2// 如果X=2,就执行下面宏定义
sbit K1=P3^1;
sbit K2=P3^2;
#define Pout P1  
#include <2.h>
#endif
请高手们不吝赐教,谢谢!

回复

使用道具 举报

ID:47286 发表于 2021-8-23 11:05 | 显示全部楼层
这样写是可以 但只能在编译前选择 编译后就固定了 不能在运行中再变化 而编译前用 就没必要用变量做1或2定义 直接defin=1or2就行 编译器会自己去看

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:592807 发表于 2021-8-23 11:21 | 显示全部楼层

我知道你想表达啥,但是很遗憾,不能。这写涉及到预处理问题,软件在编译过程中就必须要决定的东西是不能够临时改变的。把你要切换的1.h和2.h文件比作两种背包一种是装食物的食物包,一种是装衣服的衣服包,你一定要在出门前(编译前)决定用哪一种包,可以是一个包装2种东西,也可以带两种包,但是出门后食物包不能变成衣服包。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:961867 发表于 2021-8-23 11:35 | 显示全部楼层
不行,宏定义是属于编译前就进行代码字符串替换的。  不属于编译后的工作

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:878061 发表于 2021-8-23 12:22 | 显示全部楼层
为什么不自己亲自试一下呢?
回复

使用道具 举报

ID:71233 发表于 2021-8-23 14:13 | 显示全部楼层
dzbj 发表于 2021-8-23 11:05
这样写是可以 但只能在编译前选择 编译后就固定了 不能在运行中再变化 而编译前用 就没必要用变量做1或2定 ...

已经测试成功,就用你的这个方法,谢谢!
回复

使用道具 举报

ID:883242 发表于 2021-8-23 19:23 | 显示全部楼层
第一句就是错的
unsigned char X=1;
必须写成:
#define X 1
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表