(引言:个人向,不保证正确性,存在错误的欢迎大家指正)
#源文件篇#
1.1 #ifdef ... #endif
#ifdef _MSC_VER
#define _SCL_SECURE_NO_WARNINGS
#endif
语法:
#ifdef 语句1
语句2
#endif
含义:如果宏定义了语句1,则执行语句2
(ps:上述情况,个人将其理解为函数体外的if语句)
1.2 #if ... #endif
#if defined(_MSC_VER) && defined(_DEBUG)
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#endif
语法:
#if 语句1
代码段
#endif
含义:宏定义了语句1,就执行代码段
(ps:和#ifdef差不多用法吧,就是支持多个宏定义判断)
1.3 拓展 #ifdef..#else..#endif #if..#else.. #endif
就多了个宏定义不存在时,执行#else后面的语句
2.1 命名空间 using namespace
using namespace mystl::test;
std::cout.sync_with_stdio(false);
(1).using namespace mystl::test
意思:test中使用到的名儿到mystl中去找。
首先,namespace是一个关键字,用于解决命名冲突问题。
命名冲突:域有类域、命名空间域、局部域、全局域,命名冲突就是这几个域里名儿的重定义。
语法:namespace 命名空间的名儿{命名空间的成员}
(ps:感觉就是将那些名儿只在本地用,不参与域的冲突)
其次,using
这个用于展开命名空间,意思是,让命名空间可访问,不加后面用命名空间的成员时,命名空间域外的将不可以访问。
最后,::,域作用限定符
一般的访问顺序是先局部域再局部域,加了“::”会直接访问全局域,“名::”访问名里面的。
用法示例:
::a(去全局域)
某个空间名::a(去命名空间域)
(2)std
平时用的using namespace std,展开的是std标准库中的命名空间;
这里应该是自己设的有cout,所有用std命名空间来限制一下。