c++ 踩坑

2021年11月12日12:13:11

 

vs studio版本 vs2019,boost 是1.71版本
 
1,vs studio 设置c++项目的版本
右击项目->属性->C/C++->语言->C++ 语言标准。当设置为默认值(应该即为IOS2014C++14标准)时,_MSVC_LANG值为201402L,
当其值设置为:IOS2014C++14标准时,_MSVC_LANG值为201703L。修改配置后,程序恢复正常
 
2,vs studio设置 boost库
先编译好编译boost项目——>属性——>选择VC++目录,在包含目录 和 库目录添加以上2个路径包含目录加上
在 D:\boost_1_71_0\库目录加上 D:\boost_1_71_0\stage\lib 或可以新建一个系统环境变量BOOST_DIR,值为E:\program\boost_1_71_0。
在path系统环境变量中添加:%BOOST_DIR%;VC++包含目录中添加: %BOOST_DIR%;VC++库目录中添加: %BOOST_DIR%\stage\lib;
 
3,错误 LNK2005 _main 已经在 tt.obj 中定义
错误 LNK1169 找到一个或多个多重定义的符号一个项目只能有一个main()函数,不然编译会出错
 
4,#pragmaonce这个宏有什么作用?
为了避免同一个头文件被包含(include)多次,C/C++中有两种宏实现方式:一种是#ifndef方式;另一种是#pragma once方式。在能够支持这两种方式的编译器上,二者并没有太大的区别。但两者仍然有一些细微的区别。
 
5,常用快捷键
ctrl+k,c 注释选中行ctrl+k,u 取消对选中行的注释全局 格式化代码 快捷键ctrl+k,在同时按ctrl+d选中行 ctrl+k, ctrl+f
快速生成代码—–连续两次Tab键:例如:快速生成for循环—使用方法 代码中输入for,然后连续按两次Tab键快速生成try—catch—使用方法 代码中输入try,然后连续按两次Tab键
Peek View 快速查看方法/类定义—–Alt +F12:方法的展开和折叠—–Ctrl+M+P/Ctrl+M+O:
重写父类的方法—–override +Space(空格):设置快捷键 工具----选项------环境-----键盘
 
6, 在vs studio里面编写 c项目代码
 
7,vs studio在c++项目里添加文件
点击Source Files ->add->existing Items ,选择刚才移除的c/c++文件就可以了。右键项目->添加->现有项,选择需要添加的文件
 
8,添加源码目录
 
9,hpp头文件与h头文件的区别
hpp,其实质就是将.cpp的实现代码混入.h头文件当中,定义与实现都包含在同一文件,则该类的调用者只需要include该hpp文件即可,无需再将cpp加入到project中进行编译。
而实现代码将直接编译到调用者的obj文件中,不再生成单独的obj,采用hpp将大幅度减少调用 project中的cpp文件数与编译次数,也不用再发布烦人的lib与dll,因此非常适合用来编写公用的开源库。
 
10,This function or variable may be unsafe
_CRT_SECURE_NO_WARNINGS
 
11,C4996 'std::codecvt_utf8<wchar_t,1114111,(std::codecvt_mode)0>':warningSTL4017: std::wbuffer_convert,
在url_encode_decode.hpp上加入#pragma warning(disable:4996),抑制一下警告就ok了注意不管是调试在x86,还是x64都是没问题的
 
12,暂停调试cli,查看输出结果
 
13,C++ #include—尖括号和双引号的区别
简单区分:1,系统自带的头文件用尖括号括起来,这样编译器会在系统文件目录下查找。
2,用户自定义的文件用双引号括起来,编译器首先会在用户目录下查找,然后在到C++安装目录(比如VC中可以指定和修改库文件查找路径,Unix和Linux中可以通过环境变量来设定)中查找,最后在系统文件中查找。
尽管以上两种#include命令都可以正确地被VC++识别了,但是它们却并不符合C++的标准。标准规定,包含C++提供的标准头文件或系统头文件时应使用尖括号,包含自定义头文件时可使用双引号。
 
14,数据类型和范围
类型
字节长度
范围
char
1 个字节
-128 到 127 或者 0 到 255
unsigned char
1 个字节
0 到 255
signed char
1 个字节
-128 到 127
int
4 个字节
-2147483648 到 2147483647
unsigned int
4 个字节
0 到 4294967295
signed int
4 个字节
-2147483648 到 2147483647
short int
2 个字节
-32768 到 32767
unsigned short int
2 个字节
0 到 65,535
signed short int
2 个字节
-32768 到 32767
long int
8 个字节
-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
signed long int
8 个字节
-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
unsigned long int
8 个字节
0 到 18,446,744,073,709,551,615
float
4 个字节
精度型占4个字节(32位)内存空间,+/- 3.4e +/- 38 (~7 个数字)
double
8 个字节
双精度型占8 个字节(64位)内存空间,+/- 1.7e +/- 308 (~15 个数字)
long double
16 个字节
长双精度型 16 个字节(128位)内存空间,可提供18-19位有效数字。
wchar_t
2 或 4 个字节
1 个宽字符
 
15,特殊字符
特殊字符
含义
\a
铃声(警报声)
\b
回退
\f
换页
\n
换行
\r
回车
\t
TAB键
\v
垂直制表
'
单引号
"
双引号
?
问号
| 反斜杠
 
\000
八进制
\xhhh
十六进制
 
16,包管理工具
个人建议使用微软的vcpkg,毕竟可以在windows上使用开发测试,可以和Vstudio一起使用
 
17,c++ orm
0
 
 
18,vcpkg安装
克隆vcpkg库C:\src>git clone https://github.com/Microsoft/vcpkg.git
这个速度快然后运行C:\src>cd vcpkgC:\src\vcpkg>bootstrap-vcpkg.bat然后,运行如下命令使计算机的所有用户都可以使用vcpkg (备注:需要管理员权限)
C:\src\vcpkg>vcpkg integrate install使用vcpkg安装任何的程序包,
如:C:\src\vcpkg>vcpkg install sdl2 curl sqlite3最后,在Visual Studio 2015 or Visual Studio 2017创建新的项目或者打开已经存在的项目。
你就可以使用#include引用头文件并使用安装的程序库。
 
19,入门使用什么web mvc框架入门
2020年8月21日17:35:40我尝试了好多框架入门的话,建议现在现代化比较好的drogon 有中文文档,性能也是非常好的中文文档 
其他的常见我基本都尝试了,要么不完善,要么入门复杂,根本不适合入门
 
20,windows wsl安装centos
 
21,C++中经常使用的作用符::
作用域限定符。在类体内申明函数,并在类体外定义函数时,必须在定义函数时加上类名和作用域限定符。
class MyClass{ public: int num; int fun();//类体内申明函数 };
//类体外定义函数 int MyClass::fun(){ return 1; } •
静态数据和静态成员函数成员既可以通过对象名引用,也可以通过类名加::来引用。
例如,MyClass::a。静态成员函数的目的就是为了操作静态数据成员,静态成员函数引用不了非静态的数据成员。
class MyClass{ private static int a; }; //类体外引用静态成员变量 MyClass::a;
引用在类中定义的typedef新类型
class MyClass{ public typedef int INT;
//此处typedef的作用:定义类型别名 } MyClass ::INT b;//类体外声明一个变量
全局作用域符号:当全局变量在局部函数中与其中某个变量重名,可用::来区分。
int a;//全局变量 void fun(){ int a; //局部变量 a(局部变量) = a(局部变量)*a(局部变量) ; ::a(全局变量) =::a(全局变量) *a(局部变量); }
 
22,C++ 单引号和双引号区别
单引号是字符型
双引号是字符串型
单引号引起的一个字符实际上代表一个整数。
双引号引起的字符串,代表的却是一个指向无名数组起始字符的指针。该数组会被双引号之间的字符以及一个额外的二进制为零的字符 '\0' 初始化。
 
23,C++强制类型转换:static_cast、dynamic_cast、const_cast、reinterpret_cast
 
24,栈和堆的区别
栈:在函数内部声明的所有变量都将占用栈内存。
堆:这是程序中未使用的内存,在程序运行时可用于动态分配内存。
 
25,标准预定义宏
__DATE__ 进行预处理的日期(“Mmm dd yyyy”形式的字符串文字,如May 27 2006)
__FILE__ 代表当前源代码文件名的字符串文字 ,包含了详细路径,如G:/program/study/c+/test1.c
__LINE__ 代表当前源代码中的行号的整数常量
__TIME__ 源文件编译时间,格式微“hh:mm:ss”,如:09:11:10;
__func__ 当前所在函数名,在编译器的较高版本中支持
__FUNCTION__ 当前所在函数名
 
26,VisualStudio如何以源码文本方式打开rc文件
视图 >> 解决方案资源管理器 >> 右击XXX.rc >> 打开方式 >> 源代码(文本)编辑器
 
27,

posted on 2020-06-12 10:41  zh7314  阅读(869)  评论(0编辑  收藏  举报