如果我声明并且从不使用变量,那么gcc会给我一个警告。如何检查struct中未使用的成员?
但是,如果我有几个成员结构和一些人不习惯,GCC不会发出警告它的...
是否有一个选项(或其他方式),以检查这些? (当然,我可以手动删除一些条目,并尝试再次编译,但我正在寻找这种方法)。
谢谢
如果我声明并且从不使用变量,那么gcc会给我一个警告。如何检查struct中未使用的成员?
但是,如果我有几个成员结构和一些人不习惯,GCC不会发出警告它的...
是否有一个选项(或其他方式),以检查这些? (当然,我可以手动删除一些条目,并尝试再次编译,但我正在寻找这种方法)。
谢谢
没有GCC不会警告这一点。主要是因为在大多数情况下,无论是否使用会员都无法确定。头文件中定义了很好的struct
部分。这不仅可以用于您的应用程序,也可以用于任何引用.lib或使用相同头文件的其他应用程序。因此,仅仅因为当前编译的代码片段不使用成员,并不意味着该成员没有被其他代码片段使用。
局部变量是不同的。无论是否仅通过编译相关函数来确定它们是否易于使用。因此GCC和许多其他编译器发出警告。
该结构中可能还有成员用于填充和对齐;你可能不希望GCC警告这些。 – 2010-11-02 16:44:52
只需将结构体转换为第一个成员的类型,就可以合法且可移植地访问结构体的第一个成员而不使用其名称。
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';
恐怕这意味着既不搜索源字段的名称也不删除它是完全可靠的。
您也可以使用标准的'offsetof()'宏,这将允许您在合法和便携的情况下执行类似于第二个示例的操作。 – 2010-11-02 18:10:40
这很正确,尽管当你搜索源代码时你至少会发现这一点。 – 2010-11-02 18:11:56
+1这是一个很好的观点。 – 2013-01-08 13:14:17
'grep'呢? – 2010-11-02 16:32:49
是的,我建议您注意会员名称并查看它是否出现过一次以上。你应该能够编写脚本 – 2010-11-02 16:45:11
是的,但请看我的答案。 – 2010-11-02 16:54:02