打印

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

[复制链接]
1885|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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 | 只看该作者
试试就知道了。好像可以的,我在哪里见过类似的结构

使用特权

评论回复
5
lixianghua0428| | 2013-6-16 13:30 | 只看该作者
好像是不行的,宏定义是预处理语句,在编译程序之前就被编译器处理了,你可以用赋值语句呀

使用特权

评论回复
6
xyz549040622| | 2013-6-16 14:10 | 只看该作者
我记得是可以的,但这么放在函数里有个缺陷,你只能在执行这个函数后引用这个宏定义,在这之前就不可以了

使用特权

评论回复
7
7120223|  楼主 | 2013-6-17 09:20 | 只看该作者
试了下,行不通呀,程序乱的了。
安理说也是行不通的,宏定义那个不是变量,在if函数里面改变宏应该也是无法改变的。
我现在要求是因为两个mcu外接功能都是一样的,就是IO口的接的地方不同。通过一个IO口的高低来使软件的IO口切换。因为有四十来个io口都不一样的,所以想用类似于宏这样的方便一下子改动,还有什么其他方法么

使用特权

评论回复
8
zcw9911| | 2013-6-17 10:31 | 只看该作者
用全局变量

使用特权

评论回复
9
dongranmengming| | 2013-6-17 13:27 | 只看该作者
有宏定义判断语句

使用特权

评论回复
10
lanqiao1026| | 2013-6-17 13:41 | 只看该作者
#if  #else  这个没用过吗?

使用特权

评论回复
11
shaotli| | 2013-6-18 12:43 | 只看该作者
可以用指针

使用特权

评论回复
12
xxlin1984| | 2013-6-18 16:22 | 只看该作者
if(mm )
{
//#define a  b
直接调用B模块;
}
else
{
//#define a  c
直接调用C模块;
}

使用特权

评论回复
13
7120223|  楼主 | 2013-6-20 10:19 | 只看该作者
楼上,这样太麻烦了,我不是一个IO口,是有四十个io,调用的地方随处都有。要是都这样的感觉好麻烦。所以才会想起他方法

使用特权

评论回复
14
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

粉丝