我发生了问题。有人可能会告诉我如何删除@

我正在为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/

10-09 13:49