【问题标题】:Is there an quick way to eliminate unused types in a C program in Visual Studio?有没有一种快速的方法来消除 Visual Studio 中 C 程序中未使用的类型?
【发布时间】:2019-02-03 15:42:37
【问题描述】:

我有大量 C 代码(数十个文件,每个文件有几千行),我正试图将它们从另一个平台移植到 MSVC++。由于以前的程序员的草率,文件中存在许多冗余类型。

显然,我可以一个一个消除类型,看看它们是否构建。 Visual Studio 中是否有一种快速方法可以识别或重构未使用的类型?

typedef struct {
    int Field1;
    int Field2;
} notused1;

struct notused2 {
    int Field1;
    int Field2;
};

int ActualWork() {
    // Doesn't use either struct
}

我不认为这个问题与 2380153 重复,因为这个问题是在 2010 年提出的。

【问题讨论】:

  • 尽管您表示 2010 年提出的问题与您无关,但在过去 9 年左右,或者在此之前的 20 多年中,情况并没有发生显着变化。没有一种简单的自动方法可以做到这一点。有或多或少优秀的静态分析器可能有用,也可能没有用,但这个过程仍然令人恼火,并且离“命中或未命中”不远。
  • stackoverflow.com/questions/38822663/… - 这可能更接近您的情况,如果您决定在 Visual Studio 中使用代码清理工具,请分享您的反馈
  • 这对 C 有用吗?这看起来像托管代码。
  • 这看起来很有希望:jetbrains.com/resharper-cpp/?fromMenu

标签: c visual-studio


【解决方案1】:

在 Visual Studio 中,您可以弃用所有符号并针对每个使用的符号获取警告。 然后从使用的符号中删除所有弃用,其余的不使用。

像这样:

#pragma deprecated(X)
struct X {  // will result C4995 warning in visual studio when using this struct
};

您也可以使用__declspec(deprecated) 像这样:

struct __declspec(deprecated) X {

};

look hereand here

【讨论】:

  • 在我看来这是一个非常有创意的解决方案 :)
  • 我已经接受了这个作为答案,因为它是一个视觉工作室解决方案,虽然它的手册是非常轻松的。谢谢!
  • 对于未来的任何人,我还发现 clang 程序可以使用 -ast-dump 生成 C 程序的 AST 树。然后可以解析此输出以构建程序的表示形式,该表示形式可用于静态分析。更多步骤,但可以进入长期工具包
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-19
  • 2011-09-24
  • 1970-01-01
相关资源
最近更新 更多