Visual studio 编译记录
来源:互联网 发布:淘宝虚假交易怎么恢复 编辑:程序博客网 时间:2024/06/06 05:46
1.stdafx.h是什么
vc里用的预编译头,因为头文件不像代码文件,它不怎么改变。但是编译器每次看头文件的代码都要花很多时间,那么预编译头这玩意儿就是vc把看了以后了解到的东西全部记录下来,你下次改代码再编译的时候它就不用重新去看头文件,而是直接看它之前自己做的“笔记”就行了,加快了编译速度。
2. ZeroMemory()
介绍:
ZeroMemory宏用0来填充一块内存区域。
为了避免优化编译器的意外的影响,请使用SecureZeroMemory函数。
void ZeroMemory(PVOID Destination, SIZE_T Length);
参数:
Destination :指向一块准备用0来填充的内存区域的开始地址。
Length :准备用0来填充的内存区域的大小,按字节来计算。
返回值:无
ZeroMemory 只是将指定的内存块清零.
使用结构前清零, 而不让结构的成员数值具有不确定性, 是一个好的编程习惯
备注:
这个函数被定义为RtlZeroMemory宏。至于更多信息,请查看Winbase.h与Winnt.h这两个头文件。
ZeroMemory和memset的联系和区别:
ZeroMemory用0来填充一块内存区域,原型为:
void ZeroMemory([in] PVOID Destination,[in] SIZE_T Length);
函数memset, wmemset或者memset给字符串设置缓冲,原型为:
void memset( void *dest, int c, size_t count );
wchar_t memset(wchar_t *dest,wchar_t c,size_t count);
翻看SDK,找到头文件宏ZeroMemory的定义4 x;
#define ZeroMemory RtlZeroMemory
#define RtlZeroMemory(Destination,Length) memset((Destination),0,(Length))
从上可以看出ZeroMemory是调用memset来实现的。
Raymond Chen在文章中写道,用ZeroMemory比“= {0}” 这样的语法更清晰,而且用后者不是所有人可以马上明白。
Richard Stevens在《UNIX网络编程》中写道,memset有个潜在的危险,它的后两个参数类型相同,但是含义大径庭, 如果不慎写反了编译时也不容易查出来;相比起源于Berkerly网络编程代码早期的bezro不是ANSIC函数,但它的两个参数更容易记忆。
为什么Microsoft code sample倾向使用ZeroMemory而不是{0}? 中写道,在windows平台下,对于数组或纯结构使用ZeroMemory是安全的,对于类,则使用构造函数,不要调用ZeroMemory。
如果要调用ZeroMemory,则只是需要加入
#define _M_AXP64 //在头文件里定义该宏
#include <windows.h>
ZeroMemory与memset区别
ZeroMemory是微软的SDK提供的,memset属于C Run-time Library,所以ZeroMemory只能用于Windows系统,memset可用于别的系统。
ZeroMemory是一个宏,只是用于把一段内存的内容置零,内部是用memset实现的,memset可将内存置成别的字符。
如果你的程序是Win32程序而且不想连接c运行时库,那就用ZeroMemory,如果需要跨平台,那就用memset
3.::在c++中什么意思
(1)表示“域操作符”
例:声明了一个类A,类A里声明了一个成员函数void f(),但没有在类的声明里给出f的定义,那么在类外定义f时,
就要写成void A::f(),表示这个f()函数是类A的成员函数。
(2)直接用在全局函数前,表示是全局函数
例:在VC里,你可以在调用API 函数里,在API函数名前加::
(3)表示引用成员函数及变量,作用域成员运算符
例:System::Math::Sqrt() 相当于System.Math.Sqrt()
4. scanf及scanf_s
ANSI C中没有scanf_s(),只有scanf(),scanf()在读取时不检查边界,所以可能会造成内在泄露。所以vc++中提供了scanf_s(),在调用时,必须提供一个数字以表明最多读取多少位字符。
#include <stdio.h>#include "stdafx.h"int _tmain(int argc, _TCHAR* argv[]){int a,b,sum;printf("请输入两个整数\n");scanf_s("%d,%d",&a,1,&b,1);sum=a+b;printf("%d",sum);return 0;}
5. swprintf
函数功能:把格式化的数据写到一个流中。
函数原型:
int swprintf(wchar_t *_String,size_t _Count,const wchar_t *_Format,...);
(参见:MSDN[1] )
所属库:在VC++6.0下可以使用stdio.h或者wchar.h
由于sprintf只能输出字符,字符串和整型数据,要输出任意类型应该用swprintf 。
// crt_swprintf_s.c// wide character example// also demonstrates swprintf_s returning error code#include <stdio.h>int main( void ){ wchar_t buf[100]; int len = swprintf_s( buf, 100, L"%s", L"Hello world" ); printf( "wrote %d characters\n", len ); len = swprintf_s( buf, 100, L"%s", L"Hello\xffff world" ); // swprintf_s fails because string contains WEOF (\xffff) printf( "wrote %d characters\n", len );}
6.解决_CRT_SECURE_NO_WARNINGS 警告
1>e:/project/htt/ishow/functions.cpp(156) : warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.解决方法:
右击工程 - 属性 - 配置属性 - C/C++ - 命令行
命令行增加 /D _CRT_SECURE_NO_WARNINGS
2014-08-06
- Visual studio 编译记录
- Visual Studio编译:MSBuild
- Visual Studio 编译 clang
- Visual Studio静态编译
- Visual Studio编译libmodbus
- Visual Studio编译出错
- Visual Studio编译错误
- Visual Studio 2008编译多平台切换时出现的编译问题解决记录
- Visual Studio 2008编译多平台切换时出现的编译问题解决记录
- Visual Studio 2008安装记录
- Visual Studio 操作技巧记录。
- Visual Studio Code 使用记录
- Visual Studio集成OpenCV记录
- visual studio 2017 问题记录
- studio 编译错误记录
- visual studio命令行编译工程
- Visual Studio Makefile 方式编译
- Visual Studio 2008编译 boost_1_43_0
- Wiki语法快速参考
- [NOI2007]货币兑换CASH
- js 获取前天、昨天、今天、明天、后天的时间
- D-City(HDU 4496)
- 学习Java设计模式的10条建议
- Visual studio 编译记录
- java 图像特效之随机光晕
- 不要做一个浮躁的程序员
- AIDL简单入门
- dierti
- aserisk笔记(dahdi工具相关)
- Sequoiadb 测试体验系列之四 – Java 开发
- 把24位和32位BMP位图转为灰色bmp位图
- Access Control