lhdzwkk 发表于 2011-1-21 14:38:58

如何实现函数名和函数变量可以对应着改变

我示意下,不知道具体怎么做
只需要定义一个函数
void SetPort#x#
{
    P#x#=0xffffff;
}
调用:
SetPort0();//实现的是P0=0XFFFFFF;
SetPort1();//实现的是P1=0XFFFFFF;
SetPort2();//实现的是P2=0XFFFFFF;
哪个编译器可以实现?
具体的编译字是什么?

xinlinhack 发表于 2011-1-22 19:20:34

你试下用宏来定义函数

hemjidn 发表于 2011-1-23 00:37:35

感觉不可能……

PaulDE 发表于 2011-1-23 01:12:32

回复【楼主位】lhdzwkk
我示意下,不知道具体怎么做
只需要定义一个函数
void setport#x#
{
    p#x#=0xffffff;
}
调用:
setport0();//实现的是p0=0xffffff;
setport1();//实现的是p1=0xffffff;
setport2();//实现的是p2=0xffffff;
哪个编译器可以实现?
具体的编译字是什么?

-----------------------------------------------------------------------

看看你自己的调用,这是一个函数吗?既然不是那么怎么能做到“只需要定义一个函数”呢?
通常可变的部分可以作为函数的参数啊,
void setport(void* port)
{
    *port = 0xffffffff;
}
调用的时候把端口地址传进去就行了。

如果这样也不好操作的话参数变成一整数,里面case switch一下也很方便。

用宏替换是可以实现你想要的不同函数名对应不同变量,但那也不是只定义了一次,有几个函数还是要把这个宏写几遍。

albert_w 发表于 2011-1-23 02:37:24

#include <stdio.h>

int var_a = 1;
int var_b = 2;

#define macro1(a)    #a
#define macro2(a,b)a##b
#define macro3(a,b)a##b = 100

int main(void)
{
      macro3(var_, a);
      printf("%s = %d\n", macro1(var_a), macro2(var_,a));
      return 0;
}

===============================
var_a = 100

albert_w 发表于 2011-1-23 11:01:24

这么好个帖子...居然来自0积分用户

lhdzwkk 发表于 2011-6-14 12:48:56

最近搞zigbee IAR8051环境看到了这种做法:
#define HAL_CONFIG_IO_OUTPUT_PREP(port, pin, val) st( P##port##SEL &= ~BV(pin); \
                                                      P##port##_##pin## = val; \
                                                      P##port##DIR |= BV(pin); )

犀利的用法呵呵
应该别的编译器也有类似功能吧 留个脚印

顺便提下st()宏只是为了给扩个括号呵呵,反斜杠是换行表达
宏,不是函数,虽然调用的时候像个函数,这个叫什么函数来着?记性不好,哎...

lhdzwkk 发表于 2011-6-14 12:49:55

回复【4楼】albert_w
#include &lt;stdio.h&gt;
int var_a = 1;
int var_b = 2;
#define macro1(a)    #a
#define macro2(a,b)a##b
#define macro3(a,b)a##b = 100
int main(void)
{
      macro3(var_, a);
      printf("%s = %d\n", macro1(var_a), macro2(var_,a));
      return 0;
}
===============================
var_a = 100

-----------------------------------------------------------------------

已经有这个味道了
页: [1]
查看完整版本: 如何实现函数名和函数变量可以对应着改变