关于安装
我原来安装了vs2019,但手比较贱,所以干净地删掉了,重新下载vs2013
删除2019用的是https://blog.csdn.net/bj_zhb/article/details/104131524
在vc驿站有vs各个版本的资源,我下载的pro版,用vc驿站提供的激活码激活了
然后再安装Visual Assist X 2076并破解,
之后还安装了vc_mbcsmfc.exe
大概就这样完成环境
关于include的""与<>
“”
这个一般用于工程里的文件
<>
这个一般用于系统自带的文件
关于结构体的指针
区分指针*,解引用*,取地址&,引用&
关键字
const设为常量
static设为全局
enum设为枚举类型,尽量让里面的值不重复,常与switch case 结合
风格:习惯上可以在枚举类型的自定义类型名前加上大写的 E 加以区分
如 enum Esex { male, female} ;
工程的分享
分享时将工程文件夹sln文件同一目录下的 debug 和 release 文件夹 删除掉
再将与sln同一目录下的同名文件夹 里面的 debug 和 release 文件夹 删除掉
.h文件与.cpp文件
.h 里常放类成员的声明 .cpp 里常具体实现类内的方法
vs2013里可直接通过工程向导自动生成一对.h和.cpp文件
使用时include .h文件就好
vs会对类的成员进行内存对齐
占60b
关闭内存对齐
#pragma pack(push)
#pragma pack(1)
class a{
};
#pragma pack(pop);
类方法不占空间
class
设置多个构造函数以应对需求
类成员还是别用指针了吧
类似python的classmethod
文件io
https://www.cctry.com/forum.php?mod=viewthread&tid=290068&highlight=visual%2Bassist%2Bx
二进制
`
关于统一字符集
宽字节转窄字节
#include <windows.h>
char *WideChar2Ansi(wchar_t *pWideChar){
if (!pWideChar)return NULL;
char *pszBuf = NULL;
int needBytes = WideCharToMultiByte(CP_ACP, 0, pWideChar, -1, NULL, 0, NULL, NULL);
if (needBytes > 0){
pszBuf = new char[needBytes + 1];
ZeroMemory(pszBuf, needBytes + 1);// using 0 to fill the region
WideCharToMultiByte(CP_ACP, 0, pWideChar, -1, pszBuf, needBytes, NULL, NULL);
}
return pszBuf;
}
如果在函数内是用的char pszBuf[100]={0};
的方式申请的内存,最后又返回指针,是非法的,因为这段内存的作用域是这个函数,函数执行完了内存就会释放,所以必须在堆上申请内存,也就是用new
或者malloc
来申请
new玩要delete掉
窄字节转宽字节
#include <windows.h>
wchar_t *AnsiChar2Wide(char *pChar){
if (!pChar)return NULL;
wchar_t *pszBuf = NULL;
int needWChar = MultiByteToWideChar(CP_ACP, 0, pChar, -1, NULL, 0);
if (needWChar > 0){
pszBuf = new wchar_t[needWChar + 1];
ZeroMemory(pszBuf, (needWChar + 1)*sizeof(wchar_t));
MultiByteToWideChar(CP_ACP, 0, pChar, -1, pszBuf, needWChar);
}
return pszBuf;
}
注意输出要用 wcout 和 wcin 不然输出仅仅是地址