##和#用法(转载)

#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
另外,"##"两边的空格有无都可以。
posted @ 2009-09-22 11:16  规格严格-功夫到家  阅读(358)  评论(0编辑  收藏  举报