c 語言中的 和

2021-10-03 21:06:39 字數 1807 閱讀 4068

我們使用#把巨集引數變為乙個字串,用##把兩個巨集引數貼合在一起.

當巨集引數是另乙個巨集的時候,需要注意的是凡巨集定義裡有用』#』或』##』的地方巨集引數是不會再展開。

下面舉兩個例項:

#define print(f,v)\

printf("the " #v " is :"f ,v) //加上#不會替換引數,只替換其所對應的字元;

int main()

輸出:the name is :lilei

用來取函式名

#define name_str(n) #n

#define strcpy(a,b) strcpy(a##_p,#b) //把第乙個引數後邊加上字元_p,把第二個引數變成字串

void testfun0()

int main()

the fun name:testfun0

// 通過函式名呼叫函式

#include "stdafx.h"

#include #include using namespace std;

#define print(f,v)\

printf("the " #v " is :"f ,v) //加上#不會替換引數,只替換其所對應的字元;

bool testfun0(string name, int mode)

bool testfun1(string name, int mode)

bool testfun2(string name, int mode)

using testfunc = bool(*)(string name, int mode);

using testpair = std::pair;

#define name_str(n) #n

#define test_func(x) testpair( name_str(x), x)

// 將函式儲存,方便通過 key 方式呼叫函式

mapallfunc = ;

int main()

return 0;

}

#include "stdafx.h"

#include #include using namespace std;

#define cat(str1, str2) str1##str2

#define string(x) #x

#define strcpy(a,b) strcpy(a##_p,#b) //把第乙個引數後邊加上字元_p,把第二個引數變成字串

int main()

輸出:

aaa234

var2

var1

乙個比較實際的應用:

#define struct(type) typedef struct _tag_##type type;\

struct _tag_##type

struct(student);

int main()

//上述 struct(student)根據巨集展開即:

struct _tag_student

typedef struct _tag_student student;

//也等於

typedef  struct _tag_student

student;

其實就是正常定義了乙個結構體型別;這麼寫是以前的寫法,寫的比較精練;

C語言中的「 」和「

先說左移,左移就是把乙個數的所有位都向左移動若干位,在c中用 運算子.例如 int i 1 i i 2 把i裡的值左移2位 也就是說,1的2進製是000.0001 這裡1前面0的個數和int的位數有關,32位機器,gcc裡有31個0 左移2位之後變成 000.0100,也就是10進製的4,所以說左移...

C語言中a和 a

一.a 這裡我們先看看陣列名代表的是什麼,這個概念可能大家有所誤解,認為陣列名代表的就是陣列的位址,當然,陣列名代表的是乙個位址,但是關鍵是,通過這個位址,我們關注的是它能取得多大空間的資料的值。例如對於乙個char 型別的位址,我們能夠取得乙個位元組的值,對於乙個int型的位址,我們能夠取得4個位...

C語言中的 和 符號

之前對 和 符號一直理解的比較淺顯。只知道 p好像表示的是乙個指標 p表示的是乙個位址。然而這次當遇到了下面這個情況的時候 int a 10 int b a printf d n a printf d n a printf d n b printf d n b 結果 10 6487620 64876...