gpt4 book ai didi

c - GCC - 打印结构的定义

转载 作者:太空宇宙 更新时间:2023-11-03 23:20:54 24 4
gpt4 key购买 nike

C 程序是否可以打印结构的定义?拥有成员名称固然很好,但只需一个有序的数据类型列表(以及数组长度,如果是数组)就足够了。

我一直在寻找预处理器指令来实现这一点,但找不到。是否有预处理器指令可以获取代码的注释部分并将其用作#define 变量。如果是这样,我可以初始化一些 sting 变量来保存 #define 变量的值。

例如像这样的结构按原样打印

struct foo{
int a;
char b;
short arr[6];
}

或者像这样

struct s{
int m1;
char m2;
short m3[6];
}

格式并不重要,只要可以从数据中重新创建结构即可。所以这样的事情也可以:

s{int,char,short[10]}

仅供引用,这是一个资源受限的基于 ARM 的设备。

我不想手动将结构代码复制粘贴到打印语句中。如果结构代码改变了,而打印语句没有改变,就会产生错误的结果。

最佳答案

目标文件格式包含您需要的信息,并允许编程访问。其中之一是 Dwarf .调试器通常使用此信息。

我认为(但我不确定)可以访问运行代码 的调试信息。这与在复杂的运行时系统(如 Java 或 .net 系列)中运行的语言程序不同。那些可以反射(reflection)自己。

在用传统编译语言编写的程序中,您可能会打开一个目标文件——可能是正在运行的可执行文件本身! -- 并以编程方式检查它,就像调试器一样。考虑到这一点,可以想象分析源代码会更容易(在 C 和 C++ 中,许多类型定义必须以头文件的形式提供)。但是对于非平凡的用途,这个想法可能是骗人的,因为编译器已经为您对源代码进行了词法分析和解析,并将所有信息放在整洁的数据结构中,以便轻松访问。如果您对源代码进行操作,则这部分编译过程(即前端的相当一部分)必须由您完成。

关于c - GCC - 打印结构的定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40058161/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com