tft每日頭條

 > 科技

 > c語言基礎運算符

c語言基礎運算符

科技 更新时间:2024-10-14 16:33:00

一、運算符#

  • # 運算符用于在預處理期将宏參數轉換為字符串
  • # 的轉換作用是在預處理期完成的,因此隻在宏定義中有效

示例如下

#include <stdio.h> #define TO_STRING(s) #s int main(void) { printf(TO_STRING(689754)); printf("\n"); return 0; }

運行結果如下

c語言基礎運算符(C編程技巧運算符)1

該運算符用途就是字符串化。C語言允許在字符串中包含宏參數。例如,如果x是一個宏形參,那麼#x就是轉換為字符串“x”的形參名

示例如下:

#include <stdio.h> #define square(x) printf("The square of " #x " is %d.\n",((x)*(x))) int main(void) { int a = 9; SQUARE(a); SQUARE(5 4); return 0; }

運行結果如下

c語言基礎運算符(C編程技巧運算符)2

這裡需要注意,#運算符是在預處理期間完成的,做了字符串化,而運算不是!

二、運算符##

  • ## 運算符用于在預處理期粘連兩個标識符
  • ## 的連接作用是在預處理期完成的,因此隻在宏定義中有效

示例如下

#include <stdio.h> #define CONNECT_STRING(a,b) (a##b) int main(void) { printf("value=%d\n", CONNECT_STRING(10, 50)); return 0; }

運行結果如下

c語言基礎運算符(C編程技巧運算符)3

該運算符就是用于标識的拼接。一般在批量定義結構體或者函數時,用該運算符會比較省事。

c語言基礎運算符(C編程技巧運算符)4

三、注意事項

當宏參數是另一個宏的時候,凡是宏定義裡有用“#”、“##”的地方,宏參數是不會再展開了!!!

示例如下

#include <stdio.h> #define TO_STRING(s) #s #define VALUE 100 int main(void) { printf(TO_STRING(VALUE)); printf("\n"); return 0; }

運行結果如下

c語言基礎運算符(C編程技巧運算符)5

解決如下

#include <stdio.h> #define _TO_STRING(s) #s #define TO_STRING(s) _TO_STRING(s) #define VALUE 100 int main(void) { printf(TO_STRING(VALUE)); printf("\n"); return 0; }

運行結果如下

c語言基礎運算符(C編程技巧運算符)6

其實解決這個問題,就是加了一個中間轉換層,讓所有宏的參數在這裡全部展開。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved