嗯,你需要了解范围规则 - 用 {... }理解“范围”的概念
局部变量
观察样例代码产生的输出。 应该清楚主要区别。 这些都是在其 {...} 范围内的“局部”变量。
int main( ) { int X = 10, Y = 15; { int X = 20; { int X = 30, Y = 35; brain.Screen.printAt(4,30, "3rd one: %d, %d ", X, Y); } brain.Screen.printAt(4, 60, "2nd one: %d, %d", X, Y); } brain.Screen.printAt(4, 90, "1st one: %d, %d", X, Y); return 0; }
输出:
3rd one: 30, 35 2nd one: 20, 15 1st one: 10, 15
上面的例子用于快速和简单的说明。 不要在嵌套范围内使用相同的垂直变量。
将变量放到“main()”指令块之外会如何?
全局变量
将变量放在main()
指令块之外,但不在任何其他函数内,将使变量可被程序中的所有函数全局使用。 这些被称为全局变量。
int gValue = 90000; // this is global to all other scope int main() { Brain.Screen.setFont(fontType::mono30); int X = 10; { int X = 20, gValue = 8000; { int X = 30, gValue= 700; Brain.Screen.printAt(4, 30, " 3rd one: %d ", gValue + X); } Brain.Screen.printAt(4, 60, " 2nd one: %d ", gValue + X); } Brain.Screen.printAt(4, 90, " 1st one: %d ", gValue + X); }
输出:
3rd one: 730 2nd one: 8020 1st one: 90010
最佳实践是不要对全局和局部变量使用相同的标识符名称。
注意:请注意我提到的是:“程序”,而不是“文件”。 一个程序可以包含不止一个文件。 但是,在一个程序中,你不能有多个main()
函数。 这超出了本文的范围。 还有一些额外的规则,比如对于全局变量使用“extern”。 这将在知识库中关于一个程序中的多个文件的另一部分中进一步讨论。
什么是“namespace vex”?
Namespace 本身不一定属于“局部”与“全局”变量的讨论,因为 Namespace 不是一个变量。 但是,“namespace vex”确实包含它自己的范围。 由于它是必须包含在你的所有 V5 程序中的模板代码基础的一部分,关于 namespace 的范围规则应当在本文中简单覆盖到。
每个 namespace 就像是一处你可以创建一组变量,与该单独“space”相关的函数的空间。 你可以访问此“空间”内定义的所有可用变量,函数,类等。
你可以在https://api.vexcode.cloud/v5/html/在线查找 namespace。 为了快速查找,你也可以右键点击“vex”然后点击“Go to Definition”. 你将从 namesapce “vex”中找到大量可贵的什么是可用的信息。
你可以通过:vex::
访问它们中的任意一个。
例如回头参考模板代码:
using namespace vex; vex::brain Brain;
另外,在这个“vex”空间中的任何包含变量,函数等的名称将不会和程序中的另一个“空间”冲突。
例如,你可以决定创建“myOwnNamespace”,以及命名一个变量“Brain”。 不建议你像那样做,但是程序将允许它。 这是因为是在“myOwnNamespace”中定义的。