定义一个宏来交换符号
Define a macro to swap symbols
我想知道在 C/C++ 中是否有任何方法可以将符号与宏交换。
例如,如果我有这个代码:
#include <stdio.h>
typedef enum {
A, B, C
} foo_t;
int main(int argc, char * argv[]) {
int i;
foo_t foo[] = {A, B, C};
for (i = 0; i < sizeof(foo)/sizeof(*foo); i++)
printf("%d ", foo[i]);
printf("\n");
return 0;
}
主要是我想将每次出现的 A 替换为 B,每次出现的 B 替换为 C,每次出现的 C 替换为 A。
所以我尝试了这个:
#include <stdio.h>
typedef enum {
A, B, C
} foo_t;
#define A B
#define B C
#define C A
int main(int argc, char * argv[]) {
int i;
foo_t foo[] = {A, B, C}; // Should became B, C, A
for (i = 0; i < sizeof(foo)/sizeof(*foo); i++)
printf("%d ", foo[i]);
printf("\n");
return 0;
}
但是这样不行,就好像没有定义宏A、B、C一样。我认为这是由于递归定义(A被定义为B,B被定义为C,C被定义为A,它被定义为B,等等)
有没有其他方法可以用宏来做到这一点?
我不是在寻找许多文本编辑器提供的搜索和替换功能。
您可以这样做来实现您的目标:
#define A A_
#define B B_
#define C C_
#include <stdio.h>
typedef enum {
A, B, C
} foo_t;
#undef A
#undef B
#undef C
#define A B_
#define B C_
#define C A_
int main(int argc, char * argv[]) {
int i;
foo_t foo[] = {A, B, C}; // Should became B, C, A
for (i = 0; i < sizeof(foo)/sizeof(*foo); i++)
printf("%d ", foo[i]);
printf("\n");
return 0;
}
怎么样:
#define A 1
#define B 2
#define C 0
int main(int argc, char * argv[]) {
int i;
foo_t foo[] = {A, B, C}; // Should became B, C, A
for (i = 0; i < sizeof(foo)/sizeof(*foo); i++)
printf("%d ", foo[i]);
printf("\n");
return 0;
}
我想知道在 C/C++ 中是否有任何方法可以将符号与宏交换。 例如,如果我有这个代码:
#include <stdio.h>
typedef enum {
A, B, C
} foo_t;
int main(int argc, char * argv[]) {
int i;
foo_t foo[] = {A, B, C};
for (i = 0; i < sizeof(foo)/sizeof(*foo); i++)
printf("%d ", foo[i]);
printf("\n");
return 0;
}
主要是我想将每次出现的 A 替换为 B,每次出现的 B 替换为 C,每次出现的 C 替换为 A。
所以我尝试了这个:
#include <stdio.h>
typedef enum {
A, B, C
} foo_t;
#define A B
#define B C
#define C A
int main(int argc, char * argv[]) {
int i;
foo_t foo[] = {A, B, C}; // Should became B, C, A
for (i = 0; i < sizeof(foo)/sizeof(*foo); i++)
printf("%d ", foo[i]);
printf("\n");
return 0;
}
但是这样不行,就好像没有定义宏A、B、C一样。我认为这是由于递归定义(A被定义为B,B被定义为C,C被定义为A,它被定义为B,等等)
有没有其他方法可以用宏来做到这一点?
我不是在寻找许多文本编辑器提供的搜索和替换功能。
您可以这样做来实现您的目标:
#define A A_
#define B B_
#define C C_
#include <stdio.h>
typedef enum {
A, B, C
} foo_t;
#undef A
#undef B
#undef C
#define A B_
#define B C_
#define C A_
int main(int argc, char * argv[]) {
int i;
foo_t foo[] = {A, B, C}; // Should became B, C, A
for (i = 0; i < sizeof(foo)/sizeof(*foo); i++)
printf("%d ", foo[i]);
printf("\n");
return 0;
}
怎么样:
#define A 1
#define B 2
#define C 0
int main(int argc, char * argv[]) {
int i;
foo_t foo[] = {A, B, C}; // Should became B, C, A
for (i = 0; i < sizeof(foo)/sizeof(*foo); i++)
printf("%d ", foo[i]);
printf("\n");
return 0;
}