代码之家  ›  专栏  ›  技术社区  ›  skeept

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

  •  5
  • skeept  · 技术社区  · 14 年前

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

    但是,如果我有一个包含多个成员的结构,并且其中一些成员未被使用,gcc将不会对此发出警告。。。

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

    2 回复  |  直到 14 年前
        1
  •  5
  •   JaredPar    14 年前

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

    局部变量不同。它们是否易于使用取决于只编译所讨论的函数。因此,GCC和许多其他编译器发出警告。

        2
  •  4
  •   Martin Broadhurst    14 年前

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

    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';
    

    恐怕这意味着,无论是在源代码中搜索字段的名称,还是删除它,都不完全可靠。