openlang

能在 C 中显示所有嵌套结构体成员的大小吗?

我的情况是,一个结构体里面包含了好几个其他结构体。 下面是一个简单的例子。

typedef struct payload {
    int offset;
} payload_t;

typedef struct record {
    payload_t payloads[12];
    int status;
} record_t

能否打印属于 record_t 的所有结构体的大小?

从英语翻译查看原文

后续讨论 2

顺着彼此的依据读下去
  1. 固定链接

    首先得知道相关的类型是什么。比如,和 java 或 c# 不同,C 并不提供反射。

    知道这些类型以后,只需要 sizeof 和一个打印结果的函数就行了。

    从英语翻译查看原文
  2. 固定链接

    只靠 C 语言本身做不到,因为它不支持这样的内省。你只能逐个查看结构体成员,并输出它们的大小。

    不过,8 年前我确实遇到过同样的任务,当时是一个包含 400 个成员的大型复杂结构体。最后,我解析了目标文件中的调试信息,从中提取出所需的数据。具体细节已经记不清了,但你需要使用 -g 选项编译,再用合适的工具转储调试信息。可以看看 readelf、objdump 这两个工具以及它们的手册。

    从英语翻译查看原文

同一个问题的其他角度

  1. 通过 Google Colab 使用 MATLAB

    能在 Google Colab (云端的 Jupyter) 中使用 MATLAB 命令吗? 例如,我想在 Google Colab 中调用 Risk Management Toolbox 的函数,比如 bin(vbt, Name, Value)、tb…

    回复 2最近活动 matlab
  2. gdb 能否按地址在汇编指令处设置断点?

    我的尝试如下。 不过,看起来并不存在这条命令。 gdb 能实现这样的功能吗?

    回复 2最近活动 assembly
  3. Playwright 断言能否允许两个文本值中的任意一个?

    我想验证文本中包含 one 或 two。 在 Playwright 中能这样实现吗? 同样的写法也能用在句子内部吗,比如下面这样

    回复 2最近活动 typescript