C ++提供了检查exception的语法,例如: void G() throw(Exception); void f() throw(); 但是,Visual C ++编译器不检查它们; 抛标志简单地被忽略。 在我看来,这使得exceptionfunction无法使用。 所以我的问题是: 有没有办法让编译器检查exception是否正确捕获/ rethrown? 例如一个Visual C ++插件或一个不同的C ++编译器。 PS。 我希望编译器检查exception是否被正确捕捉,否则最终会出现这样的情况: 即使明确声明不会抛出任何东西 ,也不得不绕过每个函数调用。 更新:当使用throw()标记函数时,Visual C ++编译器会显示警告。 这很好,但遗憾的是,当你调用一个可能抛出的子程序时,这个警告不会显示出来。 例如: void f() throw(int) { throw int(13); } void h() throw() { g(); } //no warning here!
我希望你能帮助我,因为我不知道发生了什么。 在尝试将Beecrypt库添加到我的项目时出现以下错误: 致命错误C1010:在查找预编译头文件时出现意外的文件结尾。 你忘了添加“#include”stdafx.h“”到你的源? 其实我没有忘记添加#include“stdafx”给我的来源。 编译器将错误指向该.cxx文件的末尾: #define BEECRYPT_CXX_DLL_EXPORT #ifdef HAVE_CONFIG_H # include "config.h" #endif #include "beecrypt/c++/security/SecureRandom.h" #include "beecrypt/c++/security/SecureRandomSpi.h" #include "beecrypt/c++/security/Security.h" using namespace beecrypt::security; SecureRandom* SecureRandom::getInstance(const String& algorithm) throw (NoSuchAlgorithmException) { Security::spi* tmp = Security::getSpi(algorithm, "SecureRandom"); assert(dynamic_cast<SecureRandomSpi*>(tmp->cspi)); SecureRandom* result = new SecureRandom(reinterpret_cast<SecureRandomSpi*>(tmp->cspi), tmp->prov, tmp->name); delete tmp; return result; } SecureRandom* SecureRandom::getInstance(const String& type, const String& provider) […]
我必须错过一些非常明显的东西,但由于某种原因,Microsoft C ++编译器(cl.exe)的命令行版本在运行时似乎不支持报告其版本。 我们需要这个编写makefile来检查我们工具的用户已经安装的编译器版本(他们得到的makefile中包含自己编译的代码,所以我们无法控制它们的编译器版本)。 在gcc中,您只需提供选项-v或–version即可获得打印的完美版本string。 在cl.exe中,出现-v错误。 我已阅读MSDN文档和编译器联机帮助,我找不到打印编译器版本的开关。 烦人的是,当编译器启动的时候,你总是得到这个版本……但是你似乎不能启动编译器只是为了从中获得版本。 使用qmake查找编译器供应商/版本似乎相似,但只处理gcc的简单情况。 如果有问题,我正在尝试使用VC ++ Express 2005。 我希望它不会,因为检测编译器版本是最好的独立于编译器版本的方式:) 更新后,回复: 不带任何参数运行cl.exe会打印其版本和一些帮助文本。 在vc版本中,这看起来是最便捷的版本。 然后你必须parsing一个多行输出,但这并不难。 我们最终做到了这一点,并且工作。
我曾经在我的代码的某些部分看到Sleep(0) ,其中有些无限/长时间循环可用。 我被告知,这将使时间片可用于其他等待进程。 这是真的? Sleep(0)有意义吗?
什么是预编译头文件的最佳候选人? 我可以将STL和Boost标题放在那里,即使它们有模板吗? 这会减less编译时间? 另外,什么是最好的IDE设置来减less编译时间?
我在C:\完整path\ VS2010 \ blender.sln中有一个解决scheme 该解决scheme包含许多项目(大约100个)。 当我编译它们时,它们都工作正常。 我可以运行它们没有任何问题,(相当)一切正常(有一些错误)。 其中一个项目是ALL_BUILD,但是如果我尝试debuggingINSTALL(另一个项目),则会出现同样的错误。 我正在编译与RELWithDebInfo作为configuration,如果我手动执行该程序,它的工作原理。 它在C:\ full path这里输出\ VS2010 \ bin \ RelWithDebInfo 但是,如果我尝试运行编译器,它说 “无法启动程序C:\此处的完整path\ VS2010 \ RelWithDebInfo \ ALL_BUILD指定的文件无法find” 我试图将编译的程序复制到VS所需的path,但它引发了相同的错误。 我该怎么做才能解决这个问题? 现在我设置cmake来生成一个mingw项目,我编译它并使用gdb进行debugging,但这是一个非常慢和不切实际的工作stream程,我想使用VSdebugging器。 我必须说,如果我作为configuration与debugging编译,程序甚至不启动。 我在Win7 64bit上使用VS2010 Express (这是一个很大的开源程序,所以我不知道它是什么)
根据标题。 我不想下载整个Visual C ++安装程序,只需要“cl.exe”和在Windows上编译和链接C ++程序所需的其他程序。
我正在Visual Studio中编写一个简单的C++应用程序。 它也有一个设置项目。 它在我的开发机器上运行良好,但是当我在用户的机器上安装这个应用程序时,它需要Visual C++ Redistributable Package 。 我想知道为什么我的应用程序需要C++ Redistributable ? 标准C++运行时库随Windows一起提供,不是吗?
问题 我在Windows XP Professional版本2002 Service Pack 3上使用Microsoft Visual Studio 2005 Verison 8.0.50727.762(SP.050727-7600)编写了名为“Foo”的C ++项目。我将该项目构build到Foo.exe中。 然后,我将文件Foo.exe复制到Windows Server 2003企业版Service Pack 2.当我试图运行它,它失败,出现此错误, C:\foo.exe The application has failed to start because the application configuration is incorrect. Reinstalling the application may fix the problem. 在事件查看器>系统中,logging了三个事件。 事件ID:32; 来源:SideBySide Dependent Assembly Microsoft.VC80.CRT could not be found and Last Error was The referenced assembly […]
我想强制一个小函数不被编译为内联函数,即使它非常简单。 我认为这对于debugging目的很有用。 有没有关键字来做到这一点?