include引入的文件拓展了当前命名空间的搜索范围。使用头文件的形式是将该cpp定义的变量或函数的命名整理在一个路径空间中这样子方便其他文件引用。当然cpp里面可以再定义变量或者函数,但是在不include cpp或c的情况下是无法访问的。同样,声明为static 的变量时被定义在以单个文件(h或cpp)为区域的匿名命名空间中,所以外界是无法访问这段被声明的区域。向外界提供访问本区域的static变量唯一的方式用命名空间提供:比如类、基本命名空间。
实际上每个文件编译的时候都会临时生成一个编译环境空间,这个lua的环境表是类似的,只不过在C++中主要由编译器去完成管理,lua则可以通过代码区管理这张表。