C 中 和 和 的使用

2021-09-01 13:16:34 字數 1522 閱讀 1819

例如巨集定義如下:

#define conn(x,y) x##y

#define tochar(x) #@x

#define tostring(x) #x

x##y表示什麼?表示x連線y,舉例說:

int  n = conn(123,456);  結果就是n=123456;

char* str = conn("asdf", "adf")結果就是 str = "asdfadf";

對於#@x,其實就是給x加上單引號,結果返回是乙個const char。舉

例說:char a = tochar(1);結果就是a='1';

做個越界試驗char a = tochar(123);結果是a='3';

但是如果你的引數超過四個字元,編譯器就給給你報錯了!

error c2015: too many characters in constant   :p

最後看看#x,估計你也明白了,他是給x加雙引號

char* str = tostring(123132);就成了str="123132";

# 和 ## 在巨集定義(define)中經常可以看到,是預編譯過程中的常用語句,本文記錄了本人探索 # 和 ## 區別以及使用的內容

先簡單的將這兩個符號進行標籤化,然後再記錄具體實驗。

#   -- 轉換, 完成**到字串的轉換

## -- 連線, 完成**的連線

示例:1. # 轉換**為字串

#define convert(name) #name

int main(int argc, char* argv)

這裡, james 將在預編譯過程中被轉換為字串 "james" 。

2. ## **連線

#define cat(batman, robin) batman ## robin

#define make_friend(index)  printf("you and %s are friends.\n", cat(james, index));

int main(int argc, char* argv)

首先,這裡仍需要將 001、007、110 看作是**,而不是數字。

然後再說,通過 cat 將 james 和 index 拼合成為 james001、james007、james110 三個變數(**),在 print 過程中列印出來。

後續:在其他文章裡,可能你還會找到 ## 可以拼接字串, # 也可以。但是實測結果是,在 linux 環境中,無法正常編譯。所以為了**的通用性,最好還是僅將 # 和 ## 作上述兩種用途。當然在這個基礎之上可以有很多的擴充套件。

C 中 ? 和 ? 和??用法

1.可空型別修飾符 引用型別可以使用空引用表示乙個不存在的值,而值型別通常不能表示為空。例如 string str null 是正確的,int i null 編譯器就會報錯。為了使值型別也可為空,就可以使用可空型別,即用可空型別修飾符 來表示,表現形式為 t?例如 int?表示可空的整形,datet...

java中 和 和 和 詳解

首先 和 都有短路的功能 表示and條件並列,而 表示或者的意思 如果第乙個條件為false後邊的條件 不執行了,如果第乙個條件為true那麼繼續執行第二個條件,第二個條件為false那麼結果為false。第乙個為true第二個為false那麼結果為false。都為true那麼結果也為true 不管...

C 中 和 和 代表什麼

代表可空型別修飾符 引用型別可以使用空引用表示乙個不存在的值,而值型別通常不能表示為空。為了使值型別也可為空,就可以使用可空型別 帶便三元表示式 int a b c?b c 如果b大於c,a就等於b,否則等於c 代表空合併運算子 用於定義可空型別和引用型別的預設值。如果此運算子的左運算元不為null...