c语言,想通过一个可变变量来区分两个宏定义?

[复制链接]
 楼主| 7120223 发表于 2013-6-15 21:22 | 显示全部楼层 |阅读模式
本帖最后由 7120223 于 2013-6-15 21:26 编辑

#ifndef x
#define x
...
#endif
这个是变量 不是可变的,在程序编译的时候已经定好了,我想在程序运行的时候 调用两组不同的 宏定义
意思如下
uint8_t mm = 0;    //mm  其他地方改变值
.......
if(mm )
{
#define a  b
}
else
{
#define a  c
}
 楼主| 7120223 发表于 2013-6-16 12:34 | 显示全部楼层
顶顶,没人回答么
mengbinya 发表于 2013-6-16 13:10 | 显示全部楼层
宏定义是在程序预编译阶段要用的,而程序已经在执行了,这时怎么还能用这种方法
dirtwillfly 发表于 2013-6-16 13:11 | 显示全部楼层
试试就知道了。好像可以的,我在哪里见过类似的结构
lixianghua0428 发表于 2013-6-16 13:30 | 显示全部楼层
好像是不行的,宏定义是预处理语句,在编译程序之前就被编译器处理了,你可以用赋值语句呀
xyz549040622 发表于 2013-6-16 14:10 | 显示全部楼层
我记得是可以的,但这么放在函数里有个缺陷,你只能在执行这个函数后引用这个宏定义,在这之前就不可以了
 楼主| 7120223 发表于 2013-6-17 09:20 | 显示全部楼层
试了下,行不通呀,程序乱的了。
安理说也是行不通的,宏定义那个不是变量,在if函数里面改变宏应该也是无法改变的。
我现在要求是因为两个mcu外接功能都是一样的,就是IO口的接的地方不同。通过一个IO口的高低来使软件的IO口切换。因为有四十来个io口都不一样的,所以想用类似于宏这样的方便一下子改动,还有什么其他方法么
zcw9911 发表于 2013-6-17 10:31 | 显示全部楼层
用全局变量
dongranmengming 发表于 2013-6-17 13:27 | 显示全部楼层
有宏定义判断语句
lanqiao1026 发表于 2013-6-17 13:41 | 显示全部楼层
#if  #else  这个没用过吗?
shaotli 发表于 2013-6-18 12:43 | 显示全部楼层
可以用指针
xxlin1984 发表于 2013-6-18 16:22 | 显示全部楼层
if(mm )
{
//#define a  b
直接调用B模块;
}
else
{
//#define a  c
直接调用C模块;
}
 楼主| 7120223 发表于 2013-6-20 10:19 | 显示全部楼层
楼上,这样太麻烦了,我不是一个IO口,是有四十个io,调用的地方随处都有。要是都这样的感觉好麻烦。所以才会想起他方法
cool_coder 发表于 2013-6-20 10:25 | 显示全部楼层
本帖最后由 cool_coder 于 2013-6-20 10:28 编辑

看看Linux是怎么做编译配置的。编译时和运行时要先搞清楚。
感觉你的问题应该用查表来解决,不知道是不是想这样:
const your_type io_table[] = {a,b,c...};
...
output = io_table[mm];
您需要登录后才可以回帖 登录 | 注册

本版积分规则

105

主题

389

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部