我的本机 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/