c++ - 如何使 Visual C++ 9 不发出实际上从未调用过的代码?

标签 c++ visual-studio-2008 optimization visual-c++ linker

我的本​​机 C++ COM 组件使用 ATL。在 DllRegisterServer() 中,我调用了 CComModule::RegisterServer():

STDAPI DllRegisterServer()
{
    return _Module.RegisterServer(FALSE); // <<< notice FALSE here
}

FALSE 被传递以指示不注册类型库

ATL 可用作源代码,因此我实际上编译了 CComModule::RegisterServer() 的实现。在调用堆栈的某处有一个 if 语句:

if( doRegisterTypeLibrary ) { //<< FALSE goes here
  // do some stuff, then call RegisterTypeLib()
}

编译器看到了上面所有的代码,所以它可以看到实际上 if 条件总是 false,但是当我检查链接器进度消息时,我看到RegisterTypeLib() 的引用仍然存在,因此 if 语句没有被删除。

我能否使 Visual C++ 9 执行更好的静态分析,并实际看到某些代码从未被调用并且不发出该代码?

最佳答案

您是否启用了整个程序优化 [/GL]?这似乎是编译器通常无法自行完成的那种优化。

关于c++ - 如何使 Visual C++ 9 不发出实际上从未调用过的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2453399/

相关文章:

c++ - DirectWrite 对齐文本中心

c++ - 创建模板类的 std::vector ?

visual-studio-2008 - WIX:多个功能/文件夹的热重复 ID 问题

用于实现 Firebug 算法的R包?

sql - 总结停止时间数据的更好方法?

c++ - OpenGL 统一缓冲区?

c++ - 函数调用顺序

c# - 防止用户调整窗口/表单大小

visual-studio-2008 - 从对象生成 DTO

java - 为 Javafx 程序分配更多 VRAM