如何检查struct中未使用的成员?

ske*_*ept 5 c struct gcc-warning

如果我声明并且从不使用变量,那么gcc会给我一个警告.

但是,如果我有一个包含几个成员的结构,而其中一些没有使用,那么gcc就不会对它发出警告......

是否有选项(或其他方法)来检查这些?

(当然我可以手动删除一些条目并尝试再次编译,但我正在寻找这种方法).

谢谢

Jar*_*Par 5

海湾合作委员会不会对此发出警告.主要是因为在大多数情况下是否使用成员无法确定.很大一部分struct是在头文件中定义的.这不仅可以由您的应用程序使用,还可以由引用.lib或使用相同头文件的任何其他应用程序使用.因此,仅仅因为编译的当前代码段不使用该成员,并不意味着该成员不被其他代码段使用.

局部变量是不同的.是否通过仅编译所讨论的功能来容易地确定它们是否被使用.因此GCC和许多其他编译器发出警告.


Mar*_*rst 5

您可以合法且可移植地访问结构的第一个成员,而无需使用其名称,只需将结构强制转换为第一个成员的类型即可。

typedef struct {
    int x;
} mystruct;

mystruct s;
*(int*)&s = 3;
Run Code Online (Sandbox Code Playgroud)

您还可以通过将结构转换为具有兼容结构的另一种结构类型,以不可移植但几乎 100% 的可靠性访问结构中的任何字段,而无需使用其名称。

typedef struct {
    int x;
    char y;
} mystruct;

typedef struct {
    int a;
    char b;
} otherstruct;

mystruct s;
((otherstruct*)&s)->b = 'C';
Run Code Online (Sandbox Code Playgroud)

恐怕这意味着搜索字段名称的来源或删除它都是完全可靠的。