| 
 
| #include "config.h" 
 uint8 a = 7;
 uint8 b = 3;
 uint8 c = 0;
 
 uint8 d = 5;
 uint8 e = 4;
 uint8 x = 0;
 
 uint8 s = 0;
 uint8 j = 0;
 
 
 void CreateMacro(uint8 i,uint8 s)
 {
 j = s;
 #define f(i)      j
 
 }
 
 int main (void)
 {
 
 
 CreateMacro(a, b);
 CreateMacro(d, e);
 
 c = f(7);
 x = f(5);
 
 while (1);
 return 0;
 }
 
 上面是我写的程序,不加全局变量j会提示找不到第二个参数s(下面那个函数中的s)。就像这样定义
 void CreateMacro(uint8 i,uint8 s)
 {
 #define f(i)      s
 }
 但是仿真的结果c和x都等于4.但是宏定义函数运行两次应该是
 #define f(7)  5
 #define f(5)  4
 但实际运行后可能认为宏f就是得到4?我以前看过uboot,lwip有类似在函数中定义宏的操作,这里为了提高效率,省内存,用了这种方法,不过得不到结果。哪里不正确呢?这应该是带参数的宏吧,请各位指点。
 或者还有什么方法可以实现我说的这种映射,7-->5,5-->4,类似的映射,就是一个数字映射到另一个数字?函数switch比较慢,查找表太耗内存,我想不到别的方法,但是宏定义又搞不定,请指教。谢谢。
 | 
 |