【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: hello
macro define add: 4210688
used as pointer: ello
used 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: hello
macro define add: 4210688
used as pointer: ello
used as array  : e
C语言进阶高级编程PDF》是一本以C语言为主题的进阶级别编程书籍,旨在帮助读者提升C语言编程水平并掌握更高级的编程技巧和思维方式。 该PDF书籍的内容包括但不限于以下几个方面: 1. 数据结构与算法:介绍了常用数据结构(如链表、栈、队列、树等)的实现原理和使用方法,以及一些常见算法(如排序、查找等)的实现。 2. 指针与内存管理:探讨了指针的概念、指针和数组、指针和函数等相关内容,以及如何进行动态内存管理和资源释放。 3. 文件操作:介绍了C语言中对文件的读写操作方法,包括文件的打开、写入、读取和关闭等。 4. 高级函数和宏:介绍了C语言中的函数指针、回调函数、宏定义等高级编程技巧,以及如何利用宏定义提高代码的可读性和可维护性。 5. 库函数和系统调用:详细介绍了C语言标准库函数和一些系统调用的使用方法,如字符串处理函数、数学函数、时间函数等。 6. 多线程和进程:探讨了C语言中多线程和进程的概念和使用方法,包括线程的创建与同步、进程的创建与间通信等。 通过阅读《C语言进阶高级编程PDF》,读者可以拓宽自己的C语言知识面,学习更高级和更复杂的编程技巧,提升自己在C语言编程方面的能力和应用水平。无论是对于初学者还是有一定经验的C语言开发者来说,这本书都是一本很有价值的参考资料。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值