宏定义实现字符串引用

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

原理

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

最简单的引用策略

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

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语言进阶】 宏定义实现字符串引用相关推荐

  1. C语言-宏定义和字符串

    C语言-宏定义和字符串 定义符号常量(宏定义) 格式 下面我们看看如何在C语言中写宏定义呢 接下来我们看看运行结果吧 关于c语言中的字符串 定义符号常量(宏定义) 把程序中出现的所有标识符,替换为已经 ...

  2. c语言 字符串数组末尾,C语言中,利用宏定义一个字符串和字符数组定义的字符串其末尾都会自动添加\0字符...

    利用宏定义一个字符串#define MYPHONE "AT+CMGS" 字符数组的方式来定义一个字符串unsigned char SMS[]="HELLO, WELCOM ...

  3. 关于C语言define宏定义字符串常量

    1.问题由来: 本人一直以为宏对于字符串的处理也是直接在预处理时进行替换:但是最近在工作中遇到了字符串宏+1的情况:于是彻底的颠覆了以前的思维:于是乎进行测试验证得出以下结果. 2.测试代码 /*测试 ...

  4. 如何用C语言改变宏定义的大小,C语言中宏定义使用的小细节

    C语言中宏定义使用的小细节 #pragma#pragma 预处理指令详解 在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作.#p ...

  5. C语言中宏定义的使用

    1. 引言 1.1 宏定义的基本语法 1.2 宏定义的优点 1.3 宏定义的缺点 1.4 宏还是函数 2 使用宏时的注意点 2.1 算符优先级问题 2.2 分号吞噬问题 2.3 宏参数重复调用 2.4 ...

  6. C语言常用宏定义(#define)使用方法

    ·  正  ·  文  ·  来  ·  啦  · 前言 ------在上篇文章里面,我们分析了预处理的一个完整过程,这能够让我们理解一个写好的程序,在生成一个可执行文件,到底发生了什么,对我们在大型 ...

  7. C/C++编程笔记:浅析 C 语言中宏定义的使用,知识点全解

    宏定义是用一个标识符来表示一个字符串,在宏调用中将用该字符串代替宏名.给程序员提供了便利,使程序更加清晰,便于阅读和理解,进一步提高了程序的运行效率,对于嵌入式系统而言,为了能达到性能要求,宏是一种很 ...

  8. c语言长度宏定义运算符,C语言在宏定义中使用语句表达式和预处理器运算符

    语句表达式的亮点在于定义复杂功能的宏.使用语句表达式来定义宏,不仅可以实现复杂的功能,而且还能避免宏定义带来的歧义和漏洞.下面以一个简单的最小值的宏为例子一步步说明. 1.灰常简单的么,使用条件运算符 ...

  9. 【C语言】宏定义和带参宏定义

    宏定义是在编程中经常使用的一个模块,其优点在于当写的代码量比较大的时候方便修改检查,可以做到改一变"百". 一.宏定义 宏定义是用宏名来表示一个字符串,在宏展开时又以该字符串取代宏 ...

最新文章

  1. 查车的行驶轨迹_怎么查车辆行驶轨迹?
  2. python自动化办公兼职-python如何实现自动化办公?
  3. 解决nginx重启“var/run/nginx/nginx.pid no such file or directory问题
  4. 3.git版本控制-管理修改、撤销、删除
  5. 乡村野生草药_官方野生蝇群流口水分数
  6. 多个cuda 被单进程沾满_报名 | 提高GPU利用率,听英伟达专家分享这个CUDA工具
  7. leetcode--57--Insert Interval
  8. Linux——Django 开发环境部署(二)python版本控制器pyenv
  9. tomcat登录账户配置
  10. html平面图绘制,如何利用Word绘制校园平面图?
  11. eclipse java类图_Eclipse下生成/编辑Java类图或时序图(UML)[转载]
  12. 手机怎么投屏到电脑?小技能分享
  13. 基于soot的过程内数据流分析
  14. 【项目管理】如何制定进度计划?
  15. Linux gpg命令
  16. 日志查看 docker容器启动失败原因
  17. hander机制深入理解
  18. CSS Div 实现舞台灯光效果
  19. 晚清时真正的武林高手在这儿?
  20. 考研复试面试--网络安全篇

热门文章

  1. 阿里风控大脑关于大数据应用的探索与实践
  2. 终于等到你!阿里正式向 Apache Flink 贡献 Blink 源码
  3. 基于TableStore构建简易海量Topic消息队列
  4. 高性能开发,别点,发际线要紧!
  5. 一文读懂DataOps
  6. ESL:我们如何使用首云混合云产品实现提效降本
  7. 音视频应用驶入快车道 开发者如何快速追赶这波技术红利?
  8. 云漫圈 | 女生适合做程序员吗?
  9. CENTOS 7 踢用户_CentOS服务器及MySQL数据库性能测试-乐搏软件测试
  10. 使用html() undefined_SweetAlert2使用教程