##和#用法(转载)
#define STRCPY(a, b) strcpy(a ## _p, #b)
int main( int argc, char** argv)
{
char var1_p[20];
char var2_p[30];
strcpy(var1_p, "aaaa");
strcpy(var2_p, "bbbb");
STRCPY(var1, var2);
STRCPY(var2, var1);
printf("var1 = %s\n", var1_p);
printf("var2 = %s\n", var2_p);
return 0;
}
由于以前没有接触过,见面的时候吓我一跳, 运行了一下,结果更让我惊讶。上网搜了一下,知道两个##表示把字符串连接在一起,一个#表 示将其变成字符串。 有在写gtk控件的时候,"_"代表字符串的国际化,我开始也以为_p是个什么国际化的东西呢,半天没有想明白,后来想到如果_p是国际化的东东,那么这 个函数中的var1和var2岂不是没有申明,原来我想多了,其实就是把a 和 _p 连接起来,就是a_p。
STRCPY(var1, var2); 就是strcpy(var1 ## _p , #var2); 也就是strcpy(var1_p, "var2"); 把var1和_p连接起来,结果就是var1_p中的值变成了字符串"var2"; 同样,var2_p中的值是"var1". 正符合运行结果:
var1 = var2
var2 = var1
另外,"##"两边的空格有无都可以。
int main( int argc, char** argv)
{
char var1_p[20];
char var2_p[30];
strcpy(var1_p, "aaaa");
strcpy(var2_p, "bbbb");
STRCPY(var1, var2);
STRCPY(var2, var1);
printf("var1 = %s\n", var1_p);
printf("var2 = %s\n", var2_p);
return 0;
}
由于以前没有接触过,见面的时候吓我一跳, 运行了一下,结果更让我惊讶。上网搜了一下,知道两个##表示把字符串连接在一起,一个#表 示将其变成字符串。 有在写gtk控件的时候,"_"代表字符串的国际化,我开始也以为_p是个什么国际化的东西呢,半天没有想明白,后来想到如果_p是国际化的东东,那么这 个函数中的var1和var2岂不是没有申明,原来我想多了,其实就是把a 和 _p 连接起来,就是a_p。
STRCPY(var1, var2); 就是strcpy(var1 ## _p , #var2); 也就是strcpy(var1_p, "var2"); 把var1和_p连接起来,结果就是var1_p中的值变成了字符串"var2"; 同样,var2_p中的值是"var1". 正符合运行结果:
var1 = var2
var2 = var1
另外,"##"两边的空格有无都可以。