user-0 提问: 请教宏定义的问题

回复:
user: user-1
content: 引用 9 楼 paschen 的回复:[quote=引用 8 楼 tovax 的回复:] [quote=引用 7 楼 paschen 的回复:] [quote=引用 2 楼 tovax 的回复:] [quote=引用 1 楼 paschen 的回复:] #define XXX(PRE, X_001)  PRE##X_001  谢谢您的回复！ #define XXX(PRE, X_001)  PRE##X_001 是把两个宏拼接的到一起的吗，怎么实现PRE_X_001等于X_001 + 1呢[/quote]  #define PRE_X_001    (X_001+1) #define XXX(PRE, X_001)  PRE##X_001 [/quote]  我主要是想偷懒，已经傻傻的码了100条宏定义，接下来的100条想在原来的基础上做点处理，省的麻烦[/quote]  另写一个程序，用循环把需要的内容按格式输出到文本文件，然后再复制进你程序[/quote]  心有余而力不足。。。

user: user-2
content: 引用 8 楼 tovax 的回复:[quote=引用 7 楼 paschen 的回复:] [quote=引用 2 楼 tovax 的回复:] [quote=引用 1 楼 paschen 的回复:] #define XXX(PRE, X_001)  PRE##X_001  谢谢您的回复！ #define XXX(PRE, X_001)  PRE##X_001 是把两个宏拼接的到一起的吗，怎么实现PRE_X_001等于X_001 + 1呢[/quote]  #define PRE_X_001    (X_001+1) #define XXX(PRE, X_001)  PRE##X_001 [/quote]  我主要是想偷懒，已经傻傻的码了100条宏定义，接下来的100条想在原来的基础上做点处理，省的麻烦[/quote]  另写一个程序，用循环把需要的内容按格式输出到文本文件，然后再复制进你程序

user: user-1
content: 引用 7 楼 paschen 的回复:[quote=引用 2 楼 tovax 的回复:] [quote=引用 1 楼 paschen 的回复:] #define XXX(PRE, X_001)  PRE##X_001  谢谢您的回复！ #define XXX(PRE, X_001)  PRE##X_001 是把两个宏拼接的到一起的吗，怎么实现PRE_X_001等于X_001 + 1呢[/quote]  #define PRE_X_001    (X_001+1) #define XXX(PRE, X_001)  PRE##X_001 [/quote]  我主要是想偷懒，已经傻傻的码了100条宏定义，接下来的100条想在原来的基础上做点处理，省的麻烦

user: user-2
content: 引用 2 楼 tovax 的回复:[quote=引用 1 楼 paschen 的回复:] #define XXX(PRE, X_001)  PRE##X_001  谢谢您的回复！ #define XXX(PRE, X_001)  PRE##X_001 是把两个宏拼接的到一起的吗，怎么实现PRE_X_001等于X_001 + 1呢[/quote]  #define PRE_X_001    (X_001+1) #define XXX(PRE, X_001)  PRE##X_001

user: user-1
content: 引用 4 楼 zhao4zhong1 的回复:使用字符串数组和map 双手赞同，可是我不会用 能否说的具体点儿呢？

user: user-1
content: 双手赞同，可是我不会用 能否说的具体点儿呢？

user: user-1
content: 可能是我描述的不清楚，这么说吧 已经定义了100个宏定义，在这100个宏的前面分别加上前缀，得到的新宏的值是原来的宏数值加1

user: user-3
content: 使用字符串数组和map

user: user-1
content: 引用 1 楼 paschen 的回复:#define XXX(PRE, X_001)  PRE##X_001  谢谢您的回复！ #define XXX(PRE, X_001)  PRE##X_001 是把两个宏拼接的到一起的吗，怎么实现PRE_X_001等于X_001 + 1呢

user: user-2
content: #define XXX(PRE, X_001)  PRE##X_001

user: user-1
content: 引用 11 楼 zhao4zhong1 的回复:仅供参考：//codegen.c // 输入一组字符串，比如 // aa ss ddd dd 33 dd // 然后自动生成一个函数 int A(const char*); // 实现A("aa")返回0  A("ss")返回1 依次类推 #include <stdio.h> int main(int argc,char **argv) {     int i;     if (argc<2) {         printf("%s p1 [p2 ...] [>result.c]\nGenerate code int A(const char *a); 0==A(\"p1\") 1==A(\"p2\") ...",argv[0]);         return 1;     }     //printf("#include <string.h>\n");     printf("int A(const char *a) {\n");     for (i=0;i<argc-1;i++) {         printf("    if (0==strcmp(a,\"%s\")) return %d;\n",argv[i+1],i);     }     printf("    return -1;\n");     printf("}\n");     return 0; } //C:\test\Debug>codegen.exe //codegen.exe p1 [p2 ...] [>result.c] //Generate code int A(const char *a); 0==A("p1") 1==A("p2") ... //C:\test\Debug>codegen.exe aa ss ddd dd 33 dd //int A(const char *a) { //    if (0==strcmp(a,"aa")) return 0; //    if (0==strcmp(a,"ss")) return 1; //    if (0==strcmp(a,"ddd")) return 2; //    if (0==strcmp(a,"dd")) return 3; //    if (0==strcmp(a,"33")) return 4; //    if (0==strcmp(a,"dd")) return 5; //    return -1; //} // //c:\test\Debug>codegen.exe aa ss ddd dd 33 dd >result.c // //c:\test\Debug>type result.c //int A(const char *a) { //    if (0==strcmp(a,"aa")) return 0; //    if (0==strcmp(a,"ss")) return 1; //    if (0==strcmp(a,"ddd")) return 2; //    if (0==strcmp(a,"dd")) return 3; //    if (0==strcmp(a,"33")) return 4; //    if (0==strcmp(a,"dd")) return 5; //    return -1; //} //   十分感谢，我先学习一下这套路

user: user-3
content: 仅供参考：//codegen.c // 输入一组字符串，比如 // aa ss ddd dd 33 dd // 然后自动生成一个函数 int A(const char*); // 实现A("aa")返回0  A("ss")返回1 依次类推 #include <stdio.h> int main(int argc,char **argv) {     int i;     if (argc<2) {         printf("%s p1 [p2 ...] [>result.c]\nGenerate code int A(const char *a); 0==A(\"p1\") 1==A(\"p2\") ...",argv[0]);         return 1;     }     //printf("#include <string.h>\n");     printf("int A(const char *a) {\n");     for (i=0;i<argc-1;i++) {         printf("    if (0==strcmp(a,\"%s\")) return %d;\n",argv[i+1],i);     }     printf("    return -1;\n");     printf("}\n");     return 0; } //C:\test\Debug>codegen.exe //codegen.exe p1 [p2 ...] [>result.c] //Generate code int A(const char *a); 0==A("p1") 1==A("p2") ... //C:\test\Debug>codegen.exe aa ss ddd dd 33 dd //int A(const char *a) { //    if (0==strcmp(a,"aa")) return 0; //    if (0==strcmp(a,"ss")) return 1; //    if (0==strcmp(a,"ddd")) return 2; //    if (0==strcmp(a,"dd")) return 3; //    if (0==strcmp(a,"33")) return 4; //    if (0==strcmp(a,"dd")) return 5; //    return -1; //} // //c:\test\Debug>codegen.exe aa ss ddd dd 33 dd >result.c // //c:\test\Debug>type result.c //int A(const char *a) { //    if (0==strcmp(a,"aa")) return 0; //    if (0==strcmp(a,"ss")) return 1; //    if (0==strcmp(a,"ddd")) return 2; //    if (0==strcmp(a,"dd")) return 3; //    if (0==strcmp(a,"33")) return 4; //    if (0==strcmp(a,"dd")) return 5; //    return -1; //} //