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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【C语言进阶】 宏定义实现字符串引用

發(fā)布時間:2024/9/27 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C语言进阶】 宏定义实现字符串引用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

宏定義實現(xiàn)字符串引用

    • 原理
    • 最簡單的引用策略
    • 使用#進行轉(zhuǎn)義

原理

用宏定義實現(xiàn)字符串引用: 這種做法在編譯的時候直接給宏名所對應(yīng)的字符串 分配了一個內(nèi)存地址空間,可以進行字符串輸出、地址打印、指針操作和索引操作。

最簡單的引用策略

最簡單的引用策略就是直接用宏定義來定義帶有引號的字符串,如下代碼片所示。

code

#include <stdio.h>#define STR_HELLO "hello"int main() {printf("macro define str: %s\n", STR_HELLO);printf("macro define add: %d\n", STR_HELLO);printf("used as pointer: %s\n", STR_HELLO+1);printf("used as array : %c\n", STR_HELLO[1]);return 0; }

這種做法在編譯的時候直接給STR_HELLO 也就是字符串 “hello” 分配了一個內(nèi)存地址空間,可以進行字符串輸出、地址打印、指針操作和索引操作。
terminal

macro define str: hello macro define add: 4210688 used as pointer: ello used as array : e

使用#進行轉(zhuǎn)義

但有的函數(shù)偏偏不學(xué)好,非要用宏轉(zhuǎn)換來進行操作,就變成了這個樣子。
code

#include <stdio.h>#define STR_HI hello #define __parse_str(tag) #tag #define parse_str(tag) __parse_str(tag)int main() {printf("macro define str: %s\n", parse_str(STR_HI));printf("macro define add: %d\n", parse_str(STR_HI));printf("used as pointer: %s\n", parse_str(STR_HI)+1);printf("used as array : %c\n", parse_str(STR_HI)[1]);return 0; }

這種方式在linux內(nèi)核里使用的較多。主要是用于dts解析,提高可讀性,但是我個人感覺,還不如上面那種好用。
terminal

macro define str: hello macro define add: 4210688 used as pointer: ello used as array : e

總結(jié)

以上是生活随笔為你收集整理的【C语言进阶】 宏定义实现字符串引用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。