1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 【C语言进阶】 宏定义实现字符串引用

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

时间:2023-04-21 23:59:52

相关推荐

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

宏定义实现字符串引用

原理最简单的引用策略使用#进行转义

原理

用宏定义实现字符串引用:这种做法在编译的时候直接给宏名所对应的字符串 分配了一个内存地址空间,可以进行字符串输出、地址打印、指针操作和索引操作。

最简单的引用策略

最简单的引用策略就是直接用宏定义来定义带有引号的字符串,如下代码片所示。

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” 分配了一个内存地址空间,可以进行字符串输出、地址打印、指针操作和索引操作。

terminal

macro define str: hellomacro define add: 4210688used as pointer: elloused as array : e

使用#进行转义

但有的函数偏偏不学好,非要用宏转换来进行操作,就变成了这个样子。

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内核里使用的较多。主要是用于dts解析,提高可读性,但是我个人感觉,还不如上面那种好用。

terminal

macro define str: hellomacro define add: 4210688used as pointer: elloused as array : e

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。