doit:
一些关于宏的高级定义记录,
#includeenum{ test0=0, test1, test2, test3, }; // 在宏定义中,使用 # 将参数转为字符串 #define TO_NAME_INDEX(X) #X,X int main() { printf("zyy.....%srn",TO_NAME_INDEX(test3)); } out: zyy@host-pc:~/zyy/$ ./main zyy.....test3
#include#include // 在宏定义中,使用 # 将参数转为字符串,使用 ## 来连接两个参数作为一个整体标识符。 #define STRING(x) #x #define COMBINE(x, y) x##y int main(int argc, char **argv) { int x1 = 1; int x2 = 2; // STRING(x1) 将变成 "x1" // COMBINE(x, 1) 将变成 x1 printf(STRING(x1) " = %dn", COMBINE(x, 1)); printf(STRING(x2) " = %dn", COMBINE(x, 2)); return 0; }
#include#define TO_NAME_INDEX(X) #X,X enum{ test0=0, test1, test2, test3, testmax, }; struct name_to_index { char name [100]; unsigned int index; }; static struct name_to_index device_name_index[testmax] = { {TO_NAME_INDEX(test0)}, {TO_NAME_INDEX(test1)}, {TO_NAME_INDEX(test2)}, {TO_NAME_INDEX(test3)}, }; static int find_index(struct name_to_index * table, int len, const char * name) { int ret = 0; int i; if(table == NULL || name == NULL) { ret = -1 ; goto done; } for(i=0;i 欢迎分享,转载请注明来源:内存溢出
评论列表(0条)