一. 简介
前一篇文章从函数作用域方面学习了 变量的作用域。文章如下:
cmake进阶:变量的作用域-CSDN博客
本文继续从函数作用域方面学习了 变量的作用域。
二. 变量的作用域
1. 函数内定义与外部同名的变量
向顶层 CMakeLists.txt添加如下代码:
# 函数 xyz
function(xyz)message("函数内部")message("${ABC}")set(ABC "Hello China!")#设置变量 ABCmessage("${ABC}")
endfunction()set(ABC "Hello World!")#定义变量 ABC
xyz() # 调用函数message("函数外部")
message("${ABC}")
在这段代码中,我们在函数外定义了变量 ABC="Hello World!",在函数内去设置变量 ABC="Hello
China!",函数执行完之后,在外部调用 message()打印变量 ABC。
我们来看看打印信息:
从打印信息可知,函数内调用 set 去设置变量 ABC,并不是设置了外部变量 ABC 的值,而是在函数新创建了一个变量 ABC,这个与 C 语言是不一样的。
所以函数内部的代码中,调用 set 之前,引用了变量 ABC,此时它会搜索函数内是否定义了该变量,如果没有,它会向外搜索,结果就找到了外部定义的变量 ABC,所以函数内部的第一条打印信息是"Hello World!";
调用 set 之后,函数内也创建了一个变量 ABC,此时再次引用 ABC 将使用函数内定义的变量,而非是外部定义的变量,所以第二条打印信息是"Hello China!"。
下一篇文章继续从函数作用域方面,来学习变量的作用域。