有些人似乎建议你使用-Wall,但是当我做了一个小测试项目,它只是有一个main.cpp的一些包括,我得到5800个警告他们大多在标准头文件或窗口标题.
这是预期的行为吗?如何使编译警告免费?
这里有一些阅读乐趣:
1>c:\program files\microsoft visual studio 10.0\vc\include\stdint.h(105): warning C4668: '_INTPTR' is not defined as a preprocessor macro, replacing with '0' for '#if/#elif'
1>c:\program files\microsoft visual studio 10.0\vc\include\wchar.h(109): warning C4820: '_wfinddata64i32_t' : '4' bytes padding added after data member '_wfinddata64i32_t::attrib'
1>c:\program files\microsoft visual studio 10.0\vc\include\wchar.h(114): warning C4820: '_wfinddata64i32_t' : '4' bytes padding added after data member '_wfinddata64i32_t::name'
1>c:\program files\microsoft visual studio 10.0\vc\include\wchar.h(118): warning C4820: '_wfinddata64_t' : '4' bytes padding added after data member '_wfinddata64_t::attrib'
1>c:\program files\microsoft visual studio 10.0\vc\include\wchar.h(488): warning …Run Code Online (Sandbox Code Playgroud) 在VC++ 2003中,我可以将源文件保存为UTF-8,并且所有字符串都按原样使用.换句话说,以下代码将按字符串打印到控制台.如果源文件保存为UTF-8,则输出将为UTF-8.
printf("Chinese (Traditional)");
printf("??? (??)");
printf("??? (??)");
printf("Chinês (Tradicional)");
Run Code Online (Sandbox Code Playgroud)
我已经使用UTF-8 BOM保存了UTF-8格式的文件.但是使用VC2008进行编译会导致:
warning C4566: character represented by universal-character-name '\uC911'
cannot be represented in the current code page (932)
warning C4566: character represented by universal-character-name '\uAD6D'
cannot be represented in the current code page (932)
etc.
Run Code Online (Sandbox Code Playgroud)
导致这些警告的字符已损坏.适合语言环境的语言(在本例中为932 =日语)将转换为语言环境编码,即Shift-JIS.
我找不到让VC++ 2008为我编译的方法.请注意,我在源文件中使用的区域设置无关紧要.似乎没有一个语言环境说"我知道我在做什么,所以不要f $%## ng更改我的字符串文字".特别是,无用的UTF-8伪语言环境不起作用.
#pragma setlocale(".65001")
=> error C2175: '.65001' : invalid locale
Run Code Online (Sandbox Code Playgroud)
"C"也不是:
#pragma setlocale("C")
=> see warnings above (in particular locale is still 932)
Run Code Online (Sandbox Code Playgroud)
似乎VC2008强制所有字符进入指定的(或默认)语言环境,并且该语言环境不能是UTF-8.我不想更改文件以使用转义字符串,如"\ xbf\x11 ...",因为相同的源代码是使用gcc编译的,可以很好地处理UTF-8文件.
有没有办法指定源文件的编译应该保持字符串文字不变?
换句话说,在编译源文件时,我可以使用哪些编译标志来指定与VC2003的向后兼容性.即不要改变字符串文字,按字节顺序使用它们.
更新
感谢您的建议,但我想避免使用wchar.由于这个应用程序专门处理UTF-8中的字符串,因此使用wchar会要求我将所有字符串转换回UTF-8,这应该是不必要的.所有输入,输出和内部处理均采用UTF-8格式.这是一个简单的应用程序,在Linux和使用VC2003编译时工作正常.我希望能够使用VC2008编译相同的应用程序并使其工作. …
在Visual Studio 2008中使用GCC而不是VC++有多难?显然,某些关键字不匹配,有些可能无法获得语法突出显示(除非您创建了新的语言服务).
这是一个'makefile项目',几乎是什么?
Allergro是一个用于图形处理的开源C++插件库.如何将此库添加到我的编译器?
这些说明对我来说不起作用,因为我有Windows 7.我不知道操作系统是否重要.我有Visual Studio Express Edition.该库是.dll文件.如何将其添加到我的项目中?
根据标题.我不想下载整个Visual C++安装程序,只需要下载"cl.exe"以及在Windows上编译和链接C++程序所需的其他程序.
我想知道为什么这种代码可以得到测试数组的大小?我对模板中的语法不熟悉。也许有人可以解释下代码的含义template<typename,size_t>。此外,参考链接也是首选。
#define dimof(array) (sizeof(DimofSizeHelper(array)))
template <typename T, size_t N>
char(&DimofSizeHelper(T(&array)[N]))[N];
void InitDynCalls()
{
char test[20];
size_t n = dimof(test);
printf("%d", n);
}
Run Code Online (Sandbox Code Playgroud) 我在Visual Studio 2008中有一个VC++项目.
它在编译器命令行(/D "_UNICODE" /D "UNICODE")上定义unicode的符号,即使我没有在项目的预处理器部分中打开此符号.
替代文字http://i26.tinypic.com/14nz693.jpg
因此,我正在编译所有Win32库函数的Unicode版本,而不是ANSI版本.例如在WinBase.h中,有:
#ifdef UNICODE
#define CreateFile CreateFileW
#else
#define CreateFile CreateFileA
#endif // !UNICODE
Run Code Online (Sandbox Code Playgroud)
在VC++项目中打开unicode的位置,我该如何将其关闭?
微软的C++编译器和链接器似乎与它有着奇怪的关系mspdb100.dll.当然,从IDE运行时,编译器和链接器工作正常.从命令行运行任何一个时,我收到一个错误.
没问题,我找到了DLL并将其复制到目录中.现在编译器工作正常,但链接器死了.
我可以通过在我的PATH中添加"%VS10%\ Common7\IDE"来解决问题,但由于各种原因(性能,系统纯度,强迫症等),我不想这样做.为什么这个设置如此敏感,我还能做些什么来解决它?
dll dependencies visual-studio-2010 visual-studio visual-c++
如何在VC++ 2010 Express下安装和使用OpenCV 2.4.3?
我目前使用Visual Studio 2010在Windows上使用C++进行开发.在C++ 11正式发布之后,我开始使用MSVC中已有的一些功能.但是,正如预期的那样,绝大多数新变化都不受支持.
我想也许即将推出的Visual Studio版本会添加这些新功能.然而,看完之后这看起来很少会改变.
因此,我很好奇在Windows而不是MSVC上使用GCC的可行性,因为它似乎已经支持绝大多数C++ 11.据我所知,这意味着使用MinGW(我还没有看到任何其他本地Windows版本的GCC).但我对这是否值得尝试有疑问: