假设一个C模块包含以下函数定义:
void foo(int (*a)[6]){...}
是否可以从使用gcc -g编译源文件时获得的矮信息(嵌入在生成的.o文件中)中提取参数'a'的实际数组大小信息'6'?
我在目标文件上应用'readelf -wi'来获取矮信息,但我找不到任何信息来获得固定的数组大小。
答案 0 :(得分:1)
使用Fedora 20系统gcc对我来说没问题。无论它是否适用于其他版本的gcc,我都不知道......我不记得这方面的具体变化,但gcc确实发生了很大的变化。
无论如何,我使用gcc -g编译了一个类似上面的代码片段。然后我用" readelf -wi"检查了它。这会转储DWARF信息。我明白了:
<1><57>: Abbrev Number: 4 (DW_TAG_array_type)
<58> DW_AT_type : <0x6e>
<5c> DW_AT_sibling : <0x67>
<2><60>: Abbrev Number: 5 (DW_TAG_subrange_type)
<61> DW_AT_type : <0x67>
<65> DW_AT_upper_bound : 5
...作为参数的类型&#34; a&#34;。那里的子范围类型显示了边界。