1. 程式人生 > >C語言中#、##的用法

C語言中#、##的用法

一、#

    在預處理時,將巨集引數轉換為字串。    

#define ToString(x)    #x;
printf("%s\n", ToString(test));

   預處理後,變為

printf("%s\n", "test");

二、##

    預處理時,粘連巨集引數。

#define fn(a, b) void a##b(int)
fn(test, 1);

    預處理後,變為

void test1(void);

注意

    當有##、#的巨集定義時,巨集中的引數若還是巨集定義,此時該巨集不會被展開。

#define MAX_NUM 7000
#define INT(x)  #x
#define X  2
#define CON(x)  int(x##x)
printf("%s", INT(MAX_NUM));
printf("%d", CON(X));

//巨集定義展開
//printf("%s", "MAX_NUM");
//printf("%d", int(XX));

解決

#define MAX_NUM 7000
#define _INT(x) #x        //轉換巨集
#define INT(x)  _INT(x)
#define X  2
#define _CON(x) int(x##x)
#define CON(x)  _CON(x)    //轉換巨集
printf("%s", INT(MAX_NUM));
printf("%d", CON(X));

//巨集定義展開
//printf("%s", "7000");
//printf("%d", 22);