我的本地C++ COM組件使用ATL。在DllRegisterServer()
我打電話CComModule::RegisterServer()
:如何使Visual C++ 9不發出實際上從未被調用過的代碼?
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
條件總是假,但是當我檢查連接進度消息我看到對RegisterTypeLib()
的引用仍然存在,因此if
語句不會被消除。
我可以使Visual C++ 9更好的表現靜態分析和實際看到一些代碼永遠不會被調用,而不是發出該代碼?
不應該檢查asm輸出,而不是鏈接器進度消息?在鏈接階段結束之前,代碼可能不會被消除。 – jalf 2010-03-16 12:40:47