如果我声明并且从不使用变量,那么 gcc 会给我一个警告。
但是如果我有一个包含多个成员的结构并且其中一些没有使用,gcc 不会警告它......
是否有选项(或其他方法)来检查这些?
(当然我可以手动删除一些条目并尝试重新编译,但我正在寻找这种方法)。
谢谢
如果我声明并且从不使用变量,那么 gcc 会给我一个警告。
但是如果我有一个包含多个成员的结构并且其中一些没有使用,gcc 不会警告它......
是否有选项(或其他方法)来检查这些?
(当然我可以手动删除一些条目并尝试重新编译,但我正在寻找这种方法)。
谢谢
没有 GCC 不会对此发出警告。主要是因为在大多数情况下,无法确定是否使用了成员。很大一部分struct
是在头文件中定义的。这不仅可以由您的应用程序使用,还可以由引用您的 .lib 或使用相同头文件的任何其他应用程序使用。因此,仅仅因为正在编译的当前代码段不使用该成员,并不意味着该成员未被其他代码段使用。
局部变量不同。通过仅编译相关函数来确定它们是否易于使用。因此 GCC 和许多其他编译器会发出警告。
您可以合法且可移植地访问结构的第一个成员,而无需使用其名称,只需将结构转换为第一个成员的类型即可。
typedef struct {
int x;
} mystruct;
mystruct s;
*(int*)&s = 3;
您还可以通过将结构转换为具有兼容结构的另一个结构类型,以不可移植但几乎 100% 的可靠性访问结构中的任何字段,而无需使用其名称。
typedef struct {
int x;
char y;
} mystruct;
typedef struct {
int a;
char b;
} otherstruct;
mystruct s;
((otherstruct*)&s)->b = 'C';
恐怕这意味着搜索字段名称的来源或删除它都不是完全可靠的。