VS编程一些东东

编译代码前配置项,

1、宏定义 -D

2、头文件路径 -I

3、包含库:-lthread

4、库路径 -L


C编译器编译C++需要添加-lstdc++,并使用_cplusplus,extern "C"{}


说说windows吧。

出现:

1、error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MT_StaticRelease”不匹配值“MD_DynamicRelease”

问题:MT库不匹配MD库,调用的时候用的MT,库文件用MD生成的。用下面方法修改一致就可以了。

在工程上右键-》属性-》c/c++-》代码生成-》运行库,因为所选的工程运行库选择错误导致的。

其中四个选项的对应含义如下:

多线程调试Dll (/MDd) 对应的是MD_DynamicDebug

多线程Dll (/MD) 对应的是MD_DynamicRelease

多线程(/MT) 对应的是MD_StaticRelease

多线程(/MTd)对应的是MD_StaticDebug


2、uafxcw.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) 已经在 LIBCMT.lib(delete.obj) 中定义

原因:
CRT 库对 new、delete 和 DllMain 函数使用弱外部链接。MFC 库也包含 new、delete 和 DllMain 函数。这些函数要求先链接 MFC 库,然后再链接 CRT 库。当 C 运行时 (CRT) 库和 Microsoft 基础类 (MFC) 库的链接顺序有误时,可能会出现以下 LNK2005 错误。

解决方法:强制链接器按照正确的顺序链接库!
project->properties->Linker->Ignore Specific Library 添加 uafxcwd.lib Libcmtd.lib
在Additional Dependencied添加uafxcwd.lib Libcmtd.lib

或者将其负略掉。/FORCE:MULTIPLE

3、Debug可以进入的函数,Release进不去的解决办法

release版本将优化代码,while(j){}将停住,需加volatile。

问题描述:

      类中自定义的函数,在Debug时可以进入,但是Release时进不去。
可能原因:
      编译器在Release时做了优化。
解决办法:
      解除优化设置。选择工程 -> Properties ->c/c++ ->Optimization -> Optimization(将Maximize Speed 修改为Disabled.)然后,重新编译即可。


4、内存泄露检测

#define CRTDBG_MAP_ALLOC    
#include "stdafx.h"
#include <stdlib.h>    
#include <crtdbg.h>    
inline void EnableMemLeakCheck()
{
_CrtSetDbgFlag(_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) | _CRTDBG_LEAK_CHECK_DF);
}
#ifdef _DEBUG
#define new   new(_NORMAL_BLOCK, __FILE__, __LINE__)//使用这些定义,用新的new代替老的new,打印文件行
//#define   malloc(s)             _malloc_dbg(s, _NORMAL_BLOCK, __FILE__, __LINE__)
//#define   calloc(c, s)          _calloc_dbg(c, s, _NORMAL_BLOCK, __FILE__, __LINE__)
//#define   realloc(p, s)         _realloc_dbg(p, s, _NORMAL_BLOCK, __FILE__, __LINE__)
#endif

void fafal()
{
char* pChars = new char[1];
char* pChars1 = (char *)malloc(1);
//delete[] pChars;
//free(pChars1);
}
int _tmain(int argc, _TCHAR* argv[])
{
fafal();
_CrtDumpMemoryLeaks();//检测本句以前的代码
return 0;
}

5、获取当前时间

time_t t;
time(&t);
struct tm *stm = localtime(&t);
if (stm)
strftime(buf, 18, "%Y%m%d.%H:%M:%S", localtime(&t));
else
buf[0] = 0;
return buf;


你可能感兴趣的:(VS编程一些东东)