草庐IT

vc_runtimeMinimum_x

全部标签

c++ - 为什么这个可变参数计数宏在 VC++ 中失败?

我得到了以下实现来获取可变参数宏中的参数数量(目前限制为16个参数)。但是,对于VS2010,无论传递多少参数,输出始终为1。WithGCC,输出是正确的,让我得出结论,我一定错过了MSVC(10)的特定内容。#definePP_NARGS(...)\_xPP_NARGS_IMPL(__VA_ARGS__,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0)#define_xPP_NARGS_IMPL(x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,N,...)Nintmain(){inti=PP_NARGS

c++ - 如何告诉 VC++ 优化器不要合并函数体?

考虑以下代码:#includestructA{};structB{};intfunc1(A*a,B*b,intc,double*d){inttmp=0;tmp=tmp;return1;}intfunc2(A*a,B*b,intc,double*d){return1;}intmain(intargc,char*argv[]){if(func1==func2){std::cout在VS2013的Release配置中编译时,它会打印出“equal”。我有一个依赖于函数地址比较的库。你可以想象它在Release中不能正常工作。有没有办法在VC++中防止这种优化?还是我应该提交错误?

c++ - 如何告诉 VC++ 优化器不要合并函数体?

考虑以下代码:#includestructA{};structB{};intfunc1(A*a,B*b,intc,double*d){inttmp=0;tmp=tmp;return1;}intfunc2(A*a,B*b,intc,double*d){return1;}intmain(intargc,char*argv[]){if(func1==func2){std::cout在VS2013的Release配置中编译时,它会打印出“equal”。我有一个依赖于函数地址比较的库。你可以想象它在Release中不能正常工作。有没有办法在VC++中防止这种优化?还是我应该提交错误?

VS各版本VC各版本对应关系

VisualStudio经过多年的发展,有许多版本,经常我们在拿到一份代码时不知道对应的VS版本这时候可以打开工程目录下的vcproj/vcxproj文件,如下所示ProjectDefaultTargets="Build"ToolsVersion="16.0"xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> ....Project>其中的ToolsVersion代表了VC的版本,对照下表便可知对应的VS版本。什么?你拿到的代码里没有vcproj文件只有dsw文件?快去使用经典的vc6吧。VS版本VC版本MSVC_VERSI

c++ - 如何指定 vc11 lambda 调用约定

我想将嵌套在类中的lambda函数指针传递给WindowsAPI回调函数。我发现没有地方可以指定__stdcall关键字。有人告诉我编译只支持__cdecl,但是我用nm命令转储obj文件后,发现编译会生成三个辅助函数(__stdcall,__cdecl,__fastcall)同时进行。所以我的问题是,如何指定调用约定?以下代码是我的测试代码。#include"stdafx.h"int_tmain(intargc,_TCHAR*argv[]){autofunc=[](){};return0;}00000000t?@@@CAXXZ00000000t?@@@CIXXZ00000000t?@

c++ - 如何指定 vc11 lambda 调用约定

我想将嵌套在类中的lambda函数指针传递给WindowsAPI回调函数。我发现没有地方可以指定__stdcall关键字。有人告诉我编译只支持__cdecl,但是我用nm命令转储obj文件后,发现编译会生成三个辅助函数(__stdcall,__cdecl,__fastcall)同时进行。所以我的问题是,如何指定调用约定?以下代码是我的测试代码。#include"stdafx.h"int_tmain(intargc,_TCHAR*argv[]){autofunc=[](){};return0;}00000000t?@@@CAXXZ00000000t?@@@CIXXZ00000000t?@

c++ - 功能级链接(VC++ 中的/Gy 开关)- 它有什么用?

在大型VS解决方案(200个VC项目)中使用此开关有什么好处?据我了解,这主要影响生成的二进制文件的大小;但除了较小的二进制文件之外,FLL是否也有助于减少项目之间的依赖关系?FLL通常如何影响构建时间?我还希望能对VC中的FLL进行有根据的解释。MSDN的解释很简短。 最佳答案 由于您链接了MSDN的解释,您知道/Gy确保所有函数都打包在它们自己的COMDAT中。这样做的主要优点是,如果您有相同的功能,链接器可以将它们全部折叠成一段实际的代码(“COMDAT折叠”)。当您有许多相同的功能时,这可能会产生非常大的影响,当您编写大量使

c++ - 功能级链接(VC++ 中的/Gy 开关)- 它有什么用?

在大型VS解决方案(200个VC项目)中使用此开关有什么好处?据我了解,这主要影响生成的二进制文件的大小;但除了较小的二进制文件之外,FLL是否也有助于减少项目之间的依赖关系?FLL通常如何影响构建时间?我还希望能对VC中的FLL进行有根据的解释。MSDN的解释很简短。 最佳答案 由于您链接了MSDN的解释,您知道/Gy确保所有函数都打包在它们自己的COMDAT中。这样做的主要优点是,如果您有相同的功能,链接器可以将它们全部折叠成一段实际的代码(“COMDAT折叠”)。当您有许多相同的功能时,这可能会产生非常大的影响,当您编写大量使

c++ - 如何在 C++ 源代码、DLL 或 VC++ 编译器创建的任何文件中查找所有全局变量?

我正在使我的应用程序线程安全。步骤之一是同步访问或消除全局变量的使用。我正在使用VisualStudio。我找不到在我的代码库中找到所有全局变量的好方法。创建一个好的文本搜索模式是不可能的,我找不到任何有用的工具。你们知道有什么好的方法吗?它可以是源代码分析工具或二进制文件分析器。 最佳答案 这可能会有所帮助:在VisualStudio中打开项目。打开项目的“类View”在项目标题下,您会找到“全局函数和变量”。我已经用VisualStudio2010及更高版本检查了这一点。编辑:根据Ajay的建议在评论中,您还可以对项目进行分组。

c++ - 如何在 C++ 源代码、DLL 或 VC++ 编译器创建的任何文件中查找所有全局变量?

我正在使我的应用程序线程安全。步骤之一是同步访问或消除全局变量的使用。我正在使用VisualStudio。我找不到在我的代码库中找到所有全局变量的好方法。创建一个好的文本搜索模式是不可能的,我找不到任何有用的工具。你们知道有什么好的方法吗?它可以是源代码分析工具或二进制文件分析器。 最佳答案 这可能会有所帮助:在VisualStudio中打开项目。打开项目的“类View”在项目标题下,您会找到“全局函数和变量”。我已经用VisualStudio2010及更高版本检查了这一点。编辑:根据Ajay的建议在评论中,您还可以对项目进行分组。