visual-c++专题提供visual-c++的最新资讯内容,帮你更好的了解visual-c++。
首先:我知道大多数优化错误是由于编程错误或依赖于可能根据优化设置(浮点值,多线程问题……)而改变的事实. 然而,我经历了一个非常难以找到的错误,并且有点不确定是否有任何方法可以防止这种错误发生而不关闭优化.我错过了什么吗?这真的是一个优化器错误吗?这是一个简化的例子: struct Data { int a; int b; double c; }; struct Test
我最近惊讶地发现C和C语言标准有一个“严格别名”规则.实质上,该规则禁止不同类型的变量引用相同的内存位置. 举个例子: char buffer[4] = { 0x55, 0x66, 0x77, 0x88 }; int32 *p = (int32*)&buffer[0]; // illegal because buffer[0] and *p are different types 我与之交互的大多
在Visual Studio 2013中,我在一个空的,全新的命令行解决方案中编写了以下内容: int main(int argc, char* argv[]) { int xs[1]; for (auto x : xs) do ; while (0); return 0; } 编译时,我收到以下错误: error C
我正在做Visual C编程,我已经创建了一个CLR控制台应用程序.我注意到String数组应该声明为String ^,而不是String [].有什么用?为什么要用它代替[]?这种替代仅限于CLR应用吗? 这是一行代码和错误: array<String[]>[] abc; 产生的错误是 错误C2143:语法错误:缺少’;’在'[‘之前 错误C2146:语法错误:缺少’;’在标识符’abc’之前
我正在使用QFileDialog :: getOpenFileName函数来获取要打开的文件.但是,在运行 Windows 7的客户端计算机上,这将显示损坏的打开文件对话框,如屏幕截图所示,或者崩溃整个应用程序. 我用来打开文件对话框的代码是: void MainWindow::on_action_triggered() { auto filename = QFileDialog::get
我想创建一个运算符<<使用本地设置或如果不是至少manualy能够改变“.”的使用.小数分隔符为“,”.我想要一种方法来使流(iostream,fstream等)执行此操作而不是创建字符串然后打印它. 这可能吗? 你可以在你的小溪上加入一个小小的方面.我相信这样的事情对你有用: template <typename T> struct comma_separator : std::numpunct
自从我们的开发和构建环境从VS2008升级到VS2012以来,我对在我们的遗留代码库中使用volatile关键字的含义感到困惑(它非常广泛,因为从“旧”时代管理线程有很多复制模式). Microsoft在VS2012文档中有以下评论: If you are familiar with the C# volatile keyword, or familiar with the behavior of
我正在使用MSVC和一个CMaked项目.结果,我在MSVC上启用了许多为 gcc和clang启用的标志.然而,/ Wall警告级别给了我一些痛苦;它警告我包含标题中的所有类型的东西,比如stdio.h和boost标题.有没有办法阻止MSVC警告我标题中的内容?我喜欢我的警告级别,但我只想让它为我启用. /沃尔非常迂腐. / W4可能就是你真正需要的.要回答您的问题,您可以通过以下方式停用标题周围
这是WinNT.h的第519行(BUILD版本:0091) #define DECLARE_HANDLE(name) struct name##__{int unused;}; typedef struct name##__ *name 为什么我们需要一个指向结构的指针,该结构具有一个名为unused的奇怪名称的int成员? 我们是否需要使用像这样的一行代码? HINSTANCE hInstanc
我有一个存储在数组中的树,我正在尝试找到一个特定的节点: std::vector<Node> nodes = ... const unsigned short sentinel = -1; unsigned short index = 0; for (Node* node = &nodes[index]; // root node index != sentinel; node
我正在开发一个库,允许其用户(驻留在同一进程中的其他库)交换数据缓冲区和流.该库必须可以从MSVC和mingw代码中使用(更多兼容性不会受到影响,但并非严格必要).为了实现这一点,核心功能应该从一个小的,与编译器兼容的接口提供,以后可以通过使用客户端代码编译的便利层来隐藏. 该库的一个具有挑战性的方面是它必须是可扩展的,以便客户端可以提供自己的缓冲区和流实现,但核心库接口必须在发布后保持稳定.如果
MSVC多年来支持AVX / AVX2指令,根据 this msdn blog post,它可以自动生成 fused-multiply-add (FMA)指令. 但是以下两个函数都没有编译为FMA指令: float func1(float x, float y, float z) { return x * y + z; } float func2(float x, float y, fl
在对某些代码进行基准测试时,我发现即使是最无害的代码更改,它的执行时间也会有所不同. 我试图将下面的代码归结为最小的测试用例,但它仍然相当冗长(为此我道歉).几乎任何改变都会影响基准测试结果. #include <string> #include <vector> #include <iostream> #include <random> #include <chrono> #include <f
我正在开发一个用VC9构建的应用程序,我遇到了一个我不完全理解的警告:为什么在构造函数的右括号上有一个“无法访问的代码”警告? 重现问题的最小测试用例是: __declspec(noreturn) void foo() { // Do something, then terminate the program } struct A { A() { foo(); } // d:\
我们目前面临调用WriteFile(或者更确切地说是CFile :: Write – 但只是在内部调用WriteFile)的问题,导致Win32错误5 ERROR_ACCESS_DENIED. (编辑:请注意,我们无法重现行为.我们目前只有一个日志文件,指示CFile :: Write所在的源行,并包含错误ERROR_ACCESS_DENIED!) (编辑:该文件位于本地驱动器上,它实际上是一个文
我通常编程&使用 gcc和-ansi标志在 Linux下编译;但是我被迫在Visual C中完成一项工作,每当我编译我的C代码时,我都会得到所有的微软警告 ‘fscanf’: This function or variable may be unsafe. Consider using fscanf_s instead. 尽管在MSDN Developer的网站上执行了一些设置ANSI C项目的步
我被一个令人讨厌的“一个定义规则”违规所困扰. 我现在害怕在我的项目中有很多微妙的错误. 例如,以下程序将导致使用visual studio 2015的空指针取消引用: Source1.cpp: ---------- struct S { double d = 0; }; void Foo() { S s; } Source2.cpp: ----------- struct
昨天我正在查看VC 2010生成的一些32位代码(很可能;不知道具体的选项,对不起)我被一个奇怪的反复出现的细节所吸引:在很多功能中,它在序言中将ebx归零,它总是像“零寄存器”一样使用它(在MIPS上认为零美元).特别是,经常: >用它来清零记忆;这并不罕见,因为mov mem,imm的编码比mov mem,reg大1到4个字节(即使是0也必须编码完整的立即值大小),但通常(gcc)必要的寄存器
我正在调试一个源代码,它有很多大的#define’d MACRO例程. 我很有兴趣进入它们,但我想,VC不允许步入功能…所以, >我正在将它们转换为函数,但这对我来说变得很难 有没有办法进入MACRO例程?特别是在VC? PS:如果gcc编译器支持步入MACRO,我可以将整个代码移植到gcc中 除了上面的所有正确答案:我通常做的是显示混合显示(C汇编).这显示了真正发生的事情.即使您不是底层程序集
struct D { virtual void m() const = 0; }; struct D1 : public virtual D { }; struct D2 : public virtual D { }; struct B : public D2 { B() { } B(int val) : B() { } void m() const {