C語言巨集定義字串引數要把引數轉化成字串再加引號才是引數麼

2021-04-19 05:49:59 字數 1653 閱讀 6363

1樓:匿名使用者

format是print(format,value) 裡的引數,#的作用是標識format不是以字串方式輸出,而是以其替換的方式輸出。巨集定義裡面的引數輸出格式。

2樓:

printf函式的格式控制符就是在前面那個字串裡取的,所以他是一個字串必然也是格式控制符,我覺得應該是因為巨集的關係所以引入的#號來使巨集引數字串化。

c語言的巨集定義,字串連線

3樓:匿名使用者

#define adc_spi 5

#define comb_spi_info(name) "spi/"##name

用##替換#

c語言 巨集定義字串問題

4樓:

用拼接符可以做到

#define string(arg) "aaaaaaa"##arg##"bbbbbbbbbb"

但arg必須是個常量,不能是變數

這個巨集定義中的#是什麼意思

5樓:匿名使用者

#x中的#是字串化運算子,作為是把引數x字串化,即用雙引號包圍,例如,在這個程式中:

print(4);

引數4經過巨集替換並字串化之後,就成了:

printf("the no. " "4" ",is");

由於相鄰的字串會自動被連線,所以,它最終相當於:

printf("the no. 4 ,is");

6樓:匿名使用者

在#define中,標準只定義了#和##兩種操作。#用來把引數轉換成字串,##則用來連線兩個前後兩個引數,把它們變成一個字串。

#include

#define paster( n ) printf( "token " #n" = %d\n ", token##n )

int main()

輸出為[leshy@leshy src]$ ./a.outtoken 9 = 10

7樓:匿名使用者

# 本身為指令 沒有其他意義/也沒有其他效果# 號必須是該行除了任何空白字元外的第一個字元。預處理指令就是以#號開頭的**行。

# 後是指令關鍵字,在關鍵字和#號之間允許存在任意個數的空白字元。

整行語句構成了一條預處理指令,該指令將在編譯器進行編譯之前對源**做某些轉換。

下面舉例說明下:

形式為: #define 識別符號 字串.

其中的「#」表示這是一條預處理命令。凡是以「#」開頭的均為預處理命令.。

8樓:修蒙帥沛山

\的作用就是把換行符也作為定義的一部分,這樣編譯程式會認為巨集定義的邏輯行還沒有結束,而把後續的物理行仍作為定義的一部分繼續處理,以此可把一個定義分多行寫完。

例如在對下例的語句擴充套件上述巨集時,會變成後面的樣子:

resource_base_range(myobj,100);

擴充套件為:

resource_base_myobj,

resource_bsae_myobj_end=resource_base_myobj

+100-1;

即同時設定了兩個變數的值。

如何定義定義的字串,C語言中如何定義字串?

定義的字串 可以通過字元陣列或字元指標來定義字串,也可以用巨集定義對常量字串進行定義。下面通過舉例來分別進行說明 char str1 helloworld 通過字元陣列來定義字串 helloworld 陣列中每個儲存單元存放一個字元 char str2 helloworld 通過字元指標來定義字串 ...

c語言字串陣列的問題C語言字串陣列的問題

include int main scanf s a for i 0 a i 0 i for j 0 j 5 j 修改 1 下標從0 4,共5個 return 0 每行結尾的 僅僅是為了連線字串使用的,如果一個字串過長,寫在一行比較不合適,就在該行結尾處加上一個反斜槓 就可以在下邊的行繼續寫這個字串...

C語言字串出現亂碼,C語言 字串輸出時最後出現亂碼

第6行改為 char a 100 b 100 如果要輸出最終結果,沒必要每複製一個字元就輸出一次。將第25行刪掉。可以參考一下這個,講的很清楚 亂碼問題 codeblocks亂碼問題。它這個是codeblocks的,其他其實也差不 太多吧。關鍵是 原始檔儲存編碼 編譯器解釋原始檔的編碼 生成執行檔案...