#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比较慢,查找表太耗内存,我想不到别的方法,但是宏定义又搞不定,请指教。谢谢。 |