0
问答首页 最新问题 热门问题 等待回答标签广场
我要提问

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



#ifndef x
#define x
...
#endif
这个是变量 不是可变的,在程序编译的时候已经定好了,我想在程序运行的时候 调用两组不同的 宏定义
意思如下
uint8_t mm = 0;    //mm  其他地方改变值
.......
if(mm )
{
#define a  b
}
else
{
#define a  c
}
提问者:likge02641 地点:- 浏览次数:7334 提问时间:03-09 02:00
我有更好的答案
提 交
11条回答
andyfly7 03-17 11:23
顶顶,没人回答么
光摄微针 03-15 21:22
宏定义是在程序预编译阶段要用的,而程序已经在执行了,这时怎么还能用这种方法
XWM4612 03-13 16:15
试试就知道了。好像可以的,我在哪里见过类似的结构
成长的小师弟 03-18 21:36
好像是不行的,宏定义是预处理语句,在编译程序之前就被编译器处理了,你可以用赋值语句呀
xj1223726587 03-12 15:14
我记得是可以的,但这么放在函数里有个缺陷,你只能在执行这个函数后引用这个宏定义,在这之前就不可以了
nuwejfwer 03-13 02:38
试了下,行不通呀,程序乱的了。
安理说也是行不通的,宏定义那个不是变量,在if函数里面改变宏应该也是无法改变的。
我现在要求是因为两个mcu外接功能都是一样的,就是IO口的接的地方不同。通过一个IO口的高低来使软件的IO口切换。因为有四十来个io口都不一样的,所以想用类似于宏这样的方便一下子改动,还有什么其他方法么
xwgc888 03-18 03:38
有宏定义判断语句
huzp_123 03-17 03:24
#if  #else  这个没用过吗?
60user98 03-14 20:15
if(mm )
{
//#define a  b
直接调用B模块;
}
else
{
//#define a  c
直接调用C模块;
}
kasonandy 03-13 20:03
楼上,这样太麻烦了,我不是一个IO口,是有四十个io,调用的地方随处都有。要是都这样的感觉好麻烦。所以才会想起他方法
tracy87 03-14 05:39


看看Linux是怎么做编译配置的。编译时和运行时要先搞清楚。
感觉你的问题应该用查表来解决,不知道是不是想这样:
const your_type io_table[] = {a,b,c...};
...
output = io_table[mm];
撰写答案
提 交
1 / 3
1 / 3