草庐IT

c++ - 如何在 Windows 上用 Vim 运行 “:compiler msvc” 和 “:comp msbuild”?

我有VSExpress(2012)桌面版。我是否也获得了NMAKE.EXE程序?http://msdn.microsoft.com/en-us/library/dd9y37ha.aspx-TheMicrosoftProgramMaintenanceUtility(NMAKE.EXE)isatoolthatbuildsprojectsbasedoncommandscontainedinadescriptionfile.当我在运行:compilermsvc之后运行:make时,shell返回消息“'nmake'isnotrecognized作为内部或外部命令,”。如何使用这些命令编译C++

c++ - 使用非 MSVC 编译器在 Windows 下打开带有 Unicode 文件名的文件的 fstream

当文件名为“Unicode”文件名时,我需要将文件打开为std::fstream(或实际上任何其他std::ostream)。在MSVC下我有非标准扩展std::fstream::open(wchar_tconst*,...)?我可以使用GCC(最重要的)和Borland编译器等其他编译器做什么。我知道CRTL提供了_wfopen但它提供了CFILE*接口(interface)而不是io-streams,也许有一种非标准的方式来创建io-stream文件*?是否有任何boost::ifstream带有类似MSVC的Windows扩展? 最佳答案

c - MSVC 的时间函数是线程安全的吗?

对于Linux,对于时间函数,我们有一个_r版本例如:localtime有localtime_r,但在Windows中我找不到一些这样的函数。Windows时间函数本质上是线程安全的吗? 最佳答案 使用MicrosoftVisualStudio,您可以选择要使用的c运行时:通常它们是:静态单线程库(libc)静态多线程库(libcmt)动态多线程库(msvcrt)多线程库是线程安全的。单线程库最后出现在MSVC2005中,已从MSVC2008中删除。dll运行时(msvcrt.dll)必须是线程安全的——因为实现是在一个dll中,因

c - Cygwin 的 GCC 与 Windows 上的 MSVC 编译器之间是否存在任何性能问题?

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭11年前。大多数人在Linux上使用gcc,在Windows上使用MSVC编译器。我最近在我的Windows机器上安装了Cygwin的GCC编译器并正在使用它。我只是好奇它们之间是否存在任何性能差异?我的意思是GCC不能直接安装在Windows上,所以Cygwin包在Windows上创建了一些类似Linux的环境,然后GCC将使用它。那有什么缺点吗?Linux上的

c++ - 为什么 MSVC 编译这个模板函数失败?

我在将一些代码移植到MSVC时遇到了问题,这让我很困惑。据我所知,代码应该是合法的,Clang编译就好了。我已将范围缩小到以下几点:enumE{x};templatestructtraits{staticconstEval=x;};templatestructS{S(){};};templateS::val>foo(Tt);intmain(){charc=0;foo(c);}请注意,编译后,代码预计会产生链接器错误(我剥离了函数foo的定义以保持示例最小),但它应该据我所知,编译干净。但是,MSVC给了我这个错误:errorC2893:Failedtospecializefunctio

c++ - 为什么 MSVC 在寄存器中返回一个小结构时不必要地使用堆栈?

我在MSVC2013,x64,Releasebuildwith/02上编译了以下代码:structPoint{intx;inty;};PointxUnit(){Pointp;p.x=1;p.y=0;returnp;}xUnit()生成的汇编代码为:movQWORDPTRp$[rsp],1movrax,QWORDPTRp$[rsp]ret0为什么它写入堆栈然后立即读回rax返回?我早就料到了:movrax,1ret0 最佳答案 X86版本似乎表现不错(即生成“moveax,1”)。我的猜测是X86和X64版本是独立的代码库,在一个目标

c++ - std::vector::push_back() 不能在 MSVC 上为具有已删除移动构造函数的对象编译

我有一个带有已删除移动构造函数的类,当我尝试在MSVC(v.15.8.7VisualC++2017)中调用std::vector::push_back()时,我收到一条错误消息,提示我正在尝试访问已删除的移动构造函数。但是,如果我定义了移动构造函数,则代码会编译,但永远不会调用移动构造函数。两个版本都可以在gcc(v.5.4)上按预期编译和运行。这是一个简化的例子:#include#includestructA{public:A(){std::coutv{};Aa;v.push_back(a);}在VisualStudio上编译时会出现以下错误:errorC2280:'A::A(A&&

c++ - 为什么在使用 libc++ 时 sizeof( std::variant< char > ) == 8 而不是 2 (如 MSVC 的 STL 和 libstdc++)?

考虑thisexampleonCompilerexplorer.基本上,我们有这个代码片段:#include#includeenumclassEnum1:std::uint8_t{A,B};enumclassEnum2:std::uint8_t{C,D};usingVar=std::variant;usingVar2=std::variant;templatestructprint_size;voidfunc(){print_size{};print_size{};}如果我们使用GCC的libstdc++(使用clang或GCC)编译它,我们会得到预期的编译错误:error:impli

c++ - 静态常量数组在 MSVC 中动态初始化?

我们想要静态初始化一个表,但是MSVC(2015.1和更早的版本)会生成一个动态初始化器。这是演示问题的简化代码:#defineidaapi__stdcall#defineMAXSTR1024typedefinterror_t;typedefunsignedcharuchar;structpsymbol_t{shortwhat;/*-1-iserror,*//*0-anysymbol,don'tskipit*//*elselxtype_t*/shortcallNumber;/*Numberintableofmetasymbols*//*-1-nometasymbol*//*Errorc

c++ - MSVC下的奇优化问题

我看过这个博客:http://igoro.com/archive/gallery-of-processor-cache-effects/第7部分中的“怪异”引起了我的兴趣。我的第一个想法是“这只是C#很奇怪”。下面的C++代码不是我写的。volatileint*p=(volatileint*)_aligned_malloc(sizeof(int)*8,64);memset((void*)p,0,sizeof(int)*8);doubledStart=t.GetTime();for(inti=0;i我在2.4GhzCore2Quad上的时间安排如下:Option1=~8cyclesper