cmake进阶:变量的作用域说明二(从函数作用域方面)

一.  简介

前一篇文章从函数作用域方面学习了 变量的作用域。文章如下:

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!"。

下一篇文章继续从函数作用域方面,来学习变量的作用域。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/7296.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java08基础(值传递和引用传递 类和对象)

目录 一. 值传递和引用传递 1. 值传递 2. 引用传递 二. 面向对象思想 三. 类和对象 1. 类 2. 对象 2.1 使用 2.2 成员变量和局部变量区别 2.3 操作成员方法 2.4 this关键字(初始) 2.5 构造方法 (见java09) 一. 值传递和引用传递 1. 值传递 值传递是指在调用函数时将…

Open CASCADE学习|三重正交标架法则

三重正交标架(Trihedron) 定义:三重正交标架是在三维空间中定义的一个坐标系,由三个互相垂直的向量构成。这些向量分别是: 切线向量(Tangent Vector) - 表示曲线在某一特定点处的切线方向。 主法线向量&…

越权漏洞!

越权漏洞是指在一个系统或应用程序中存在某种不当的访问权限,使得攻击者可以获得比其应该拥有的权限更高的权限。这种漏洞可能允许攻击者执行未经授权的操作,例如访问他人的敏感数据、修改系统设置、执行恶意代码等。越权漏洞通常是由于设计或实现上的错…

淡茶怎么泡?

很多人都知道喝浓茶对身体不好,但是怎么冲泡淡茶却一知半解。按照《品深淡茶冲泡标准》中对绿茶冲泡淡茶的规定,冲泡的茶汤中咖啡碱不得高于31.67mg/100mL,可可碱不得高于2.67mg/mL,茶碱不得高于1.50mg/100mL,茶多酚不…

[C++核心编程-03]----C++函数提高学习

目录 引言 正文 01-函数提升简介 02-函数默认参数 03-函数占位参数 04-函数重载 05-函数重载的注意事项 总结 引言 函数在C编程中扮演着至关重要的角色,通过合理使用函数,可以提高程序的结构性、灵活性、可读性和维护性。因此&…

Guer完成对Gallium Semi的GaN产品组合的收购

预计到2024年6月,完整的射频氮化镓产品组合将完成整合 总部位于美国的Guerrilla RF (GUER)已完成对镓半导体公司GaN功率放大器和前端模块的全部收购。 自2024年4月26日起,GUER收购了Gallium Semiconductor先前发布的所有组件以及正在开发的新内核。此外…

软件测试与管理-白盒测试-基本路径测试法

知识点: 1.原理 是在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径的集合,然后根据可执行路径进行测试用例设计的方法。此方法设计出的测试用例需保证被测程序的每个可执行语句至少执行一次。 2.步骤 &a…

计算机SCI期刊,中科院2区,IF=6+,自引率低,专业认可度高!

一、期刊名称 Journal of King Saud University-Computer and Information Sciences 二、期刊简介概况 期刊类型:SCI 学科领域:计算机科学 影响因子:6.9 中科院分区:2区 出版方式:开放出版 版面费:$…

开源模型 Prometheus 2 能够评估其他语言模型,其效果几乎与 GPT-4 相当

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

在Codelab对llama3做Lora Fine tune微调

Unsloth 高效微调大模型的工具,通过Unsloth微调Llama3, Mistral, Gemma 速度提升2-5倍,内存减少70%! Codelab 创建一个jupyter notebook 选择 T4 GPU 安装Fine tune 相关的lib %%capture import torch major_version, minor_version torch…

权益商城系统源码,支持多种支付方式

权益商城系统源码,支持多种支付方式,后台商品管理,订单管理,串货管理,分站管理, 会员列表,分销日志,应用配置。 上传到服务器,修改数据库信息,导入数据库&a…

Python中的分布式爬虫系统Scrapy与分布式任务队列的结合

随着互联网的不断发展,网络爬虫在数据采集和信息挖掘中发挥着重要作用。然而,单机爬虫往往难以应对大规模数据抓取的需求,因此,构建分布式爬虫系统成为了一种必然选择。本文将介绍如何利用 Python 中的 Scrapy 框架和分布式任务队…

android studio apt代码编写实战

之所以试一下apt代码的编写,是因为发现几年前写的工程,在新的android studio中debug apt代码时,一直连不上debug环境,提示报错 Unable to open debugger port (localhost:5005): java.net.ConnectException "Connection refu…

IOS自动化—将WDA打包ipa批量安装驱动

前言 CSDN: ios自动化-Xcode、WebDriverAgent环境部署 ios获取原生系统应用的包 如果Mac电脑没有配置好Xcode相关环境,可以参考以上文章。 必要条件 Mac电脑,OS版本在12.4及以上(低于这个版本无法安装Xcode14,装不了Xcode14就…

excel中数据筛选技巧

1、筛选excel中破折号前后都为空的数据 在Excel中查找破折号前后为空的数据,你可以结合使用Excel的查找和筛选功能,或者利用一些公式来判断。以下是两种常用的方法: 方法一:使用筛选功能选中数据范围:首先&#xff0c…

微信小程序miniprogram_npm目录主包太大如何处理

在使用TDesign开发小程序,miniprogram_npm目录下很多组件,感觉很多组件我都没引用,为什么都在主包来,导致主包很大。如何优化? 在使用npm构建后生成的miniprogram_npm目录里,有所有TDesign组件。但是有很…

Docker 入门篇(六)-- idea 打包 docker 镜像流程

环境准备: idea 环境:IntelliJ IDEA 2021.3.1 (Ultimate Edition)docker 版本:v. 26.1.0准备 springboot jar 文件 :target/DockerDemo-0.0.1-SNAPSHOT.jardocker 可视化管理工具 portainer :v2.6.0 一. 配置docker远…

27.leetcode---随机链表的复制(Java版)

题目链接: https://leetcode.cn/problems/copy-list-with-random-pointer/description/ 题目解析: 使用map来解这个题就比较方便了 代码: 测试:

论文阅读:《Sequence can Secretly Tell You What to Discard》,减少推理阶段的 kv cache

目前各类大模型都支持长文本,例如 kimi chat 以及 gemini pro,都支持 100K 以及更高的上下文长度。但越长的上下文,在推理过程中需要存储的 kv cache 也越多。假设,数据的批次用 b 表示,输入序列的长度仍然用 s 表示&a…

【typescript测试 - Jest 配置与使用】

安装 npm install --save-dev types/jestnpm install --save-dev ts-jest配置 tsconfig.json {"compilerOptions": {"types": ["jest"]} }jest.config.js module.exports {preset: ts-jest,testEnvironment: node, };使用 // add.js funct…