草庐IT

c++ - constexpr 静态模板函数 : g++ error is a warning on clang

考虑以下片段:#includetemplateconstexprintf(){returnI*f();}templateconstexprintf(){return1;}intmain(){std::cout();return0;}这段代码可以很好地与g++和clang编译。非常好。现在将static添加到模板函数特化中:templateconstexprstaticintf(){return1;}然后g++6.1响应错误:11:error:explicittemplatespecializationcannothaveastorageclass还有clang3.8:11:error:

c++ - pragma warning(push, 0) 不禁用/墙警告?

我记得这个技巧在过去的某个时候有用,但现在似乎不起作用了。在#include语句周围放置#pragmawarning(push,0)实际上并不能阻止/Wall从这些语句中生成警告包含文件。将/Wall更改为/W4解决了这个问题,但使用/Wall似乎被打破了。#pragmawarning(push,0)#include#pragmawarning(pop)intmain(){std::cout构建输出:MicrosoftVisualStudioCommunity2017版本15.5.3完整的命令行开关(从cmake生成):/GS/TP/analyze-/Wall/Zc:wchar_t/G

c++ - MD5 和 SHA1 C++ 哈希库

我正试图找到一个好的(并且有据可查的)散列库来与我的C++程序一起使用,我只需要从一个字符串生成两个散列。我已经尝试使用crypto++和mhash但我没能使它们工作,同样使用http://www.zedwood.com/article/121/cpp-md5-function如果这个库是跨平台的,我会很高兴。 最佳答案 试试这个开源库http://hashlib2plus.sourceforge.net/ 关于c++-MD5和SHA1C++哈希库,我们在StackOverflow上找到

c++ - 如何在 valgrind 中跟踪/捕获 "Warning: invalid file descriptor -1 in syscall close"

valgrind显示以下内容:==13880==Warning:invalidfiledescriptor-1insyscallclose()是否有一种简单的方法来调查此错误?我的意思是-例如显示堆栈跟踪?这是一个巨大的项目,我无法手动检查每个关闭。另外,我想这对于每个系统调用错误的文件描述符都是一样的。我运行它是这样的:valgrind--trace-children=yes--track-fds=yes--log-fd=2--error-limit=no\--leak-check=full--show-possibly-lost=yes--track-origins=yes\--s

c++ - “Warning: comparison is always true”

带有-Wextra的GCC(4.7.2)发出以下警告/错误信号(我启用了-Werror):Comparisonisalwaystrueduetolimitedrangeofdatatype[-Wtype-limits]对于以下代码[tryonline]:template(std::numeric_limits::max())structvalidator{staticconstexprboolvalidate(Tvalue){returnstatic_cast(value)structvalidator{staticconstexprboolvalidate(T){returntrue

c++ - "Warning: corrupt .drectve at end of def file"是什么意思?

这个问题在这里已经有了答案:Warning:corrupt.drectveatendofdeffile(3个答案)关闭去年。在这个环境下,我编译了一个c++/openGL的例子贴在网上:Windows7代码::Blocksv13.12MinGW构建于2013年10月(不确定版本)mingw32-g++v4.8.1来自codeincodeblock.com的代码:#defineGLEW_STATIC//third-partylibraries#include#include#include#include#include#include#includeGLuintgVAO=0;GLuin

c++ - 如何防止将 `#warning` 消息视为错误?

我正在尝试在现有代码库中编译引入-Werror标志。我遇到的问题之一是在某些地方#warning用于显示信息性消息。这些不应被视为错误。一个解决方案是使用#pragmamessage代替,但这似乎不受旧版本gcc的支持。(我们的构建服务器使用gcc4.1.2)。谁能帮我解决这个问题? 最佳答案 在gcc-4.6及以上版本中,可以使用-Wno-error=cpp。至少在Lion及以后发布的clang中,您可以使用-Wno-error=#warnings。但是由于您的构建服务器使用古老的gcc,您可能在那里运气不好。通常,传递-fdia

c++ - 在 constexpr 函数中返回一个 C 字符串 : why no warning from the compiler?

考虑以下代码:constexprautof(){autostr="HelloWorld!";returnstr;}intmain(intargc,char*argv[]){staticconstexprautostr=f();std::cout我的编译器不显示任何警告是否正常?它是定义的行为吗?我能保证程序会显示"HelloWorld!"吗?我希望"HelloWorld!"不会超出函数的范围... 最佳答案 在C++中stringliterals有staticstorageduration只要程序运行就可以生存。因此,指向从f返回的

c++ - 关于 "warning C4312: ' 类型转换的问题'”

这是我的代码:HWNDWebformCreate(HWNDhParent,UINTid){returnCreateWindowEx(0,WEBFORM_CLASS,_T("about:blank"),WS_CHILD|WS_CLIPSIBLINGS|WS_VISIBLE,0,0,100,100,hParent,(HMENU)id,GetModuleHandle(NULL),0);}这是我收到的警告:warningC4312:'typecast':conversionfrom'UINT'to'HMENU'ofgreatersize这些是我的问题:为什么编译器认为转换为更大的类型是个坏主意

c++ - 我可以从 "treat warnings as errors"中排除一些特定的警告而不禁用它们吗?

在我的VisualC++代码中,我想要/WX-“将警告视为错误”。这让我处理每个警告,包括C4996-“Xwasdeclareddeprecated”我不想解决-我现在不想更改代码,我不想禁用C4996以便它保留在输出中。所以理想情况下我想要这样的东西:#pragmawarning(ExcludeFromWX:4996)因此,当使用/WX时,除此之外的所有警告都被视为错误,并且仅显示此警告并继续编译。是否有可能得到这样的行为? 最佳答案 您可以使用以下pragma重置指定的警告。我没有测试过,你也没有提到尝试这个:更新更改警告级别应