我发生了问题。有人可能会告诉我如何删除@
。
我正在为UC编写C,而且我很懒。所以我想用宏解决简单的问题,例如打开LED。
我设法做这样的事情:
#include <stdio.h>
#define BIT_STD_SET(PORT, BITNUM) ((PORT) |= (1<<(BITNUM)))
#define BIT_STD_CLE(PORT, BITNUM) ((PORT) &= ~(1<<(BITNUM)))
#define BIT_STD_TOG(PORT, BITNUM) ((PORT) ^= (1<<(BITNUM)))
#define LEDPORT_0 C
#define LEDPAD_0 3 /*Blau*/
#define LEDPORT_1 D
#define LEDPAD_1 4 /*GelbWeis*/
#define PO(n) LEDPORT_##n
#define POR(n) PORT@PO(n)
#define PA(n) LEDPAD_##n
#define PAD(n) PA(n)
#define LEDAN(n) BIT_STD_SET(POR(n),PAD(n))
#define f(a,b) a##b
#define g(a) #a
#define h(a) g(a)
int main()
{
printf("%s\n",h(LEDAN(0)));
printf("%s\n",h(LEDAN(1)));
printf("\n");
printf("%s\n",h(LEDAN(1)));
printf("\n");
printf("%s\n",h(POR(0)));
printf("%s\n",h(POR(1)));
printf("%s\n",h(f(0,1)));
printf("%s\n",g(f(0,1)));
return 0;
}
p@d:~/$ gcc ./mak.c
并得到:
p@d:~/$ ./a.out
回答:
((PORT@C) |= (1<<(3)))
((PORT@D) |= (1<<(4)))
((PORT@D) |= (1<<(4)))
PORT@C
PORT@D
01
f(0,1)
@
应该被删除。不幸的是,我不知道如何。我已经阅读了一些手册,但是我不知道该如何表达自己。 最佳答案
如果您不想打印@,请替换为:
#define POR(n) PORT@PO(n)
有了这个:
#define POR(n) PORT PO(n)
希望我能帮上忙。
关于c - C嵌套宏,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39063150/