函数内传入二级指针, 函数内动态生成二维数组

在Stack.cpp中显式声明会用到的类型:
template class Stack;template class Stack;
全放到头文件中
会影响编译速度把实现代码移至一个新头文件中
把Stack.cpp改为.h , 然后在Stack.h里面 “.h” , 这样能保证代码实现和声明在不同的文件中 , 但本质上和上一个解决办法是一样的 。引用其它的
很像C语言的# , 被包含的文件会原模原样的放在当前文件的包含位置
通配符 文件搜索 文件中的特殊变量“VPATH”就是完成这个功能的 , 如果没有指明这个变量 , make只会在当前的目录中去找寻依赖文件和目标文件 。如果定义了这个变量 , 那么 , make就会在当当前目录找不到的情况下 , 到所指定的目录中去找寻文件了 。
VPATH = src:
以上定义了两个目录 , 用冒号分隔 。自动变量
一个比较有用的操作符是“?=” , 先看示例:
FOO ?= bar
其含义是 , 如果FOO没有被定义过 , 那么变量FOO的值就是“bar” , 如果FOO先前被定义过 , 
那么这条语将什么也不做 , 其等价于:
变量值的替换
foo := a.o b.o c.obar := $(foo:.o=.c)
这个示例中 , 我们先定义了一个“ ( f o o ) ” 变 量  ,  而 第 二 行 的 意 思 是 把 “ (foo)”变量 , 而第二行的意思是把“ (foo)”变量 , 而第二行的意思是把“(foo)”中所有以“.o”字串“结尾”全部替换成“.c” , 所以我们的“$(bar)”的值就是“a.c b.c c.c” 。
first_second = Helloa = firstb = secondall = $($a_$b)
这里的“KaTeX parse error:group after '_' at2: a_?b”组成了“” , 于是 , $(all)的值就是“Hello” 。
把变量的值再当成变量
x = yy = za := $($(x))
在这个例子中 ,  ( x ) 的 值 是 “ y ”  ,  所 以 (x)的值是“y” , 所以 (x)的值是“y” , 所以( ( x ) ) 就 是 (x))就是 (x))就是(y) , 于是 ( a ) 的 值 就 是 “ z ”。( 注 意  ,  是 “ x = y ”  ,  而 不 是 “ x = (a)的值就是“z” 。(注意 , 是“x=y” , 而不是“x= (a)的值就是“z” 。(注意 , 是“x=y” , 而不是“x=(y)”)
追加变量值
objects = main.o foo.o bar.o utils.oobjects += another.o
于是 , 我们的$()值变成:“main.o foo.o bar.o utils.o .o”(.o被追加进去了)
自动生成依赖性
多数的C/C++编译器都支持一个“-M”的选项 , 即自动找寻源文件中包含的头文件 , 并生成一个依赖关系 。
例如 , 如果我们执行下面的命令:
【函数内传入二级指针, 函数内动态生成二维数组】cc -M main.c
其输出是:
main.o : main.c defs.h
如果你使用GNU的C/C++编译器 , 你得用“-MM”参数 , 不然 , “-M”参数会把一些标准库的头文件也包含进来 。
显示命令
通常 , make会把其要执行的命令行在命令执行前输出到屏幕上 。当我们用“@”字符在命令行前 , 那么 , 这个命令将不被make显示出来 , 最具代表性的例子是 , 我们用这个功能来像屏幕显示一些信息 。如:
@echo 正在编译XXX模块......
当make执行时 , 会输出“正在编译XXX模块…”字串 , 但不会输出命令 , 如果没有“@” , 那么 , make将输出: