【发布时间】:2012-09-12 21:35:36
【问题描述】:
我正在尝试编译一个 VC++ 项目,它抱怨这个错误
Microsoft Visual Studio 10.0\VC\atlmfc\include\atlalloc.h(517): warning C4987: nonstandard extension used: 'throw (...)'
它指向的线是
_Ret_opt_bytecap_x_(nElements * sizeof(T)) T* Allocate(_In_ size_t nElements) throw( ... )
{
return( AllocateBytes( ::ATL::AtlMultiplyThrow(nElements,sizeof( T )) ) );
}
【问题讨论】:
-
throw( ... )应该是什么意思?正如编译器所说,这不是标准的 -
这意味着您正在使用语言扩展...
-
是C项目还是C++项目?因为在 C 中,
try、catch或throw不是语言标准的一部分,而在 C++ 中却是。 -
请注意,这是一个警告,而不是错误。但奇怪的是,微软自己的代码与他们的编译器不兼容。
-
这是您在使用 /Wall 编译时会收到的许多警告之一。也许你完全用 /Za 禁用了扩展,尽管你通常不会走得太远。当代码使用非标准扩展时收到警告是警告的用途。整个异常规范崩溃是这个问题的核心,一个暂时不会消失的问题。
标签: c++ visual-c++ atl visual-studio-2010