日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

#和##运算符

發布時間:2025/4/5 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 #和##运算符 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1 #運算符:字符串化
      • 1.1 #運算符的基本概念
      • 1.2 #運算符的妙用
    • 2 ##運算符:預處理器粘合劑
      • 2.1 ##運算符的基本概念
      • 2.2 ##運算符的工程應用
    • 3 宏不展開的特殊情況

1 #運算符:字符串化

1.1 #運算符的基本概念

#運算符的基本概念:

  • #運算符用于在預處理期將宏參數轉換為字符串。
  • #的轉換作用是在預處理期完成的的,因此只在宏定義中有效。
  • 編譯器不知道#的轉換作用。

用法:

#include <stdio.h>#define A(a, b) #a#b #define B(a) #aint main(void) {A(hello, nihao); B(Aha);return 0; }

預處理后的結果:

int main(void) {"hello""nihao";"Aha";return 0; }

1.2 #運算符的妙用

#include <stdio.h>#define CALL(f, p) (printf("Call function %s\n", #f), f(p))int square(int n) {return n * n; }int func(int x) {return x; }int main() {int result = 0;result = CALL(square, 4);printf("result = %d\n", result);result = CALL(func, 10);printf("result = %d\n", result);return 0; }

2 ##運算符:預處理器粘合劑

2.1 ##運算符的基本概念

##運算符的基本概念:

  • ##運算符用于在預處理期粘連兩個標識符。
  • ##的連接作用是在預處理期完成的,因此只在宏定義中有效。
  • 編譯器不知道##的連接作用。

用法:

//#define A(a) a //沒問題,宏正常替換//#define A(a) qa //【大小寫字母 0123456789 " ' $ _ 】--> 參數和這些字符連接,參數不替換 //#define A(a) q##a //可以正常替換//#define A(a,b) a b //沒問題//#define A(a,b) a,b //沒問題 //參數之間連接在一起,預處理器不進行參數替換 #define A(a,b) a##b int main(void){A(x,x);return 0; }

2.2 ##運算符的工程應用

#include <stdio.h>#define STRUCT(type) typedef struct _tag_##type type;\struct _tag_##typeSTRUCT(Student) {char* name;int id; };int main() {Student s1;Student s2;s1.name = "s1";s1.id = 0;s2.name = "s2";s2.id = 1;printf("s1.name = %s\n", s1.name);printf("s1.id = %d\n", s1.id);printf("s2.name = %s\n", s2.name);printf("s2.id = %d\n", s2.id);return 0; }

3 宏不展開的特殊情況

當參數的前面有#或者##運算符時,參數不展開。

#define R B #define A hello #define B(x) x#define C(x) #x #define D(x, y) x##yint main(void) {B(A);C(A);D(A, B);B(R); // 宏只會替換一次,并不會進行遞歸替換return 0; }

預處理后的結果:

int main(void) {hello;"A";AB;B;return 0; }

總結

以上是生活随笔為你收集整理的#和##运算符的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。