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



0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 孩子不爱写作业撒谎怎么办 大便又粗又硬怎么办 二年级末考紧张怎么办 孩子粗心做数学题老出错怎么办 生地会考考了140怎么办 数学成绩考砸了怎么办? 考砸了家长发火怎么办 大型考试考砸了怎么办 能力考试考砸了怎么办 考砸了老师批评怎么办 英语抽测考砸了老师怎么办? 辅导班学生考砸了老师怎么办 好学生考砸了怎么办? 孩子学习不认真马虎怎么办 孩子做作业不认真马虎怎么办 一年级小孩学习不认真怎么办 孩子做题审题不认真怎么办 初二孩子不认真审题怎么办 孩子总是粗心抄错题看错题怎么办 孩子总马虎我要怎么办 年检标志跟车牌号不一样怎么办 纹完身后喝酒了怎么办 孩子学习态度不端正怎么办 孩子高考三模考差了家长怎么办 一年级学生学习马虎大意怎么办 一年级下册孩子做作业马虎怎么办 一年级孩子做题马虎怎么办 四年级小孩不喜欢数学该怎么办 工作出了大错误怎么办 遇到不讲道理的人怎么办 四岁宝宝爱生闷气怎么办 一岁宝宝没耐心怎么办 孩子挑食 幼儿园老师该怎么办 小孩被惯的无法无天怎么办 高中的儿子不写作业怎么办 儿子总是不写作业怎么办 长鸡眼脚背肿了怎么办 脚上反复长鸡眼怎么办 脚底长鸡眼很痒怎么办 小脚趾上长鸡眼怎么办 6岁宝宝不爱学习怎么办