【Linux】【开发】如何确认C语言中的某个宏是否已生效

  • 🐚作者简介:花神庙码农(专注于Linux、WLAN、TCP/IP、Python等技术方向)
  • 🐳博客主页:花神庙码农 ,地址:https://blog.csdn.net/qxhgd
  • 🌐系列专栏:Linux技术
  • 📰如觉得博主文章写的不错或对你有所帮助的话,还望大家三连支持一下呀!!! 👉关注✨、点赞👍、收藏📂、评论。
  • 如需转载请参考转载须知!!

【Linux】【开发】如何确认C语言中的某个宏是否已生效

  • 在开发过程中,经常需要确认某个宏是否已经生效。本文就常用的手段和技巧做一总结。

编译阶段

控制编译的宏

  • 如果某个宏控制了某个C文件的编译,则只要查看是否有该C文件对应的目标文件产生即可。如下面的情况,如果产生了xxx_func.o,则表示CONFIG_XXX_FUNC生效了。
c 复制代码
OBJS-$(CONFIG_XXX_FUNC) += $(XXX_DIR)/xxx_func.o 

控制代码的宏

编译错误
  • 在C文件中的宏控制的是一段代码,最简单的确认方式就是在宏控代码中增加编译错误,如果编译通过,则说明宏没有生效。
c 复制代码
#ifdef CONFIG_XXX_FUNC
111
...
#endif
符号表
  • 如果宏控制了某个函数或变量的定义,则可通过查看.o文件、ko文件、kallsyms等文件的符号表来确认;如下面这段代码:
bash 复制代码
#ifdef CONFIG_XXX_FUNC
int xxx_func_flag = 0;
void xxx_func(void)
{
}
#endif

即可通过类似下面的方式来确认:

bash 复制代码
readelf -a xxx_func.o | grep xxx_func_flag 

运行阶段

日志

  • 通过在宏的控制范围内增加代码,也可在运行期间进行确认。
bash 复制代码
#ifdef CONFIG_XXX_FUNC
printf("xxx_func called"\n);
xxx_func(void);
#endif

符号表

  • 如果宏控制了某个函数或变量的定义,也可以在运行阶段确认符号表,如内核的
bash 复制代码
cat /proc/kallsyms | grep xxx_func

如本文对你有些许帮助,欢迎大佬加关注、评论、点赞,有关必回关

相关推荐
@yanyu66614 小时前
C编译器安装与第一个C程序
c语言·开发语言
云杂项14 小时前
tmux指南:安装、配置与高效使用(Ubuntu上)
linux·服务器·ubuntu
山下梅子酒22514 小时前
洛谷-入门-B2070
c语言
j7~15 小时前
【Linux网络编程】四十七.《Linux IO 模型详解:阻塞 IO、非阻塞 IO 与 IO 多路转接(select)》
linux·运维·网络·select·非阻塞io·阻塞io·i/o多路连接
Logic10115 小时前
C语言/数据结构位运算题解:异或XOR找出多任务下载器中的“独特下载速度“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
GeW15 小时前
智能工厂背后:Linux在跑,数据库在扛,高端制造在加速
linux
qq_3945620015 小时前
【在Linux上升级nginx】
linux·服务器·nginx
Tairitsu_H16 小时前
[Linux系统] 基础IO核心 | 系统接口 | 文件描述符 | 重定向
linux·服务器·文件操作
嵌入式-老费16 小时前
esp32开发与应用(用Python+PySide6解决上位机开发)
linux·单片机·嵌入式硬件
事已至此先睡覺吧16 小时前
(三)Linux 基础指令(二):基础常用的一些指令
linux·运维·服务器