c/c++ 中作用于详解

MAC+VS Code+C/C++调试配置 MAC+VS Code+C/C++调试配置 第二篇博客啦,这一篇博客接着上篇没有写完的内容,继续跟大家安利颜值无敌高的VS Code。 由于自己的小白本质,在配置VS Code的C/C++环境时,很多事情并不清楚,第一次虽然配置成功了,但是后来自己又想重新整理一下工作区的文件,结果越理越乱,索性将整个文件夹删了(无奈脸),结果后来重新调试一直不成功,然后自己又有点强迫症,就一定想要配置好,结果... 阅读详情

原文出处:http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777433.html

作用域规则告诉我们一个变量的有效范围,它在哪儿创建,在哪儿销毁(也就是说超出了作用域)。变量的有效作用域从它的定义点开始,到和定义变量之前最邻近的开括号配对的第一个闭括号。也就是说,作用域由变量所在的最近一对括号确定。

(1) 全局变量:

   全局变量是在所有函数体的外部定义的,程序的所在部分(甚至其它文件中的代码)都可以使用。全局变量不受作用域的影响(也就是说,全局变量的生命期一直到程序的结束)。如果在一个文件中使用extern关键字来声明另一个文件中存在的全局变量,那么这个文件可以使用这个数据。

(2) 局部变量:

    局部变量出现在一个作用域内,它们是局限于一个函数的。局部变量经常被称为自动变量,因为它们在进入作用域时自动生成,离开作用域时自动消失。关键字auto可以显式地说明这个问题,但是局部变量默认为auto,所以没有必要声明为auto。

(3) 寄存器变量

   寄存器变量是一种局部变量。关键字register告诉编译器“尽可能快地访问这个变量”。加快访问速度取决于现实,但是,正如名字所暗示的那样,这经常是通过在寄存器中放置变量来做到的。这并不能保证将变置在寄存器中,甚至也不能保证提高访问速度。这只是对编译器的一个暗示。

使用register变量是有限制的:(1) 不可能得到或计算register 变量的地址; (2) register变量只能在一个块中声明(不可能有全局的或静态的register变量)。然而可以在一个函数中(即在参数表中)使用register变量作为一个形式参数。

    一般地,不应当推测编译器的优化器,因为它可能比我们做得更好。因此,最好避免使用关键字register。

(4) 静态变量

   关键字static有一些独特的意义。通常,函数中定义局部变量在函数中作用域结束时消失。当再次调用这个函数时,会重新创建变量的存储空间,其值会被重新初始化。如果想使局部变量的值在程序的整个生命期里仍然存在,我们可以定义函数的局部变量为static(静态的),并给它一个初始化。初始化只在函数第一次调用时执行,函数调用之间变量的值保持不变,这种方式,函数可以“记住”函数调用之间的一些信息片断。这也就是所谓的静态局部变量,具有局部作用域,它只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在,它和全局变量的区别在于全局变量对所有的函数都是可见的,而静态局部变量只在定义自己的函数体内始终可见。

   我们可能奇怪为什么不使用全局变量。static局部变量的优点是在函数范围之外它是不可用的,所以它不可能被轻易改变。这会使错误局部化。

   此外同样存在静态全局变量,具有全局作用域,它与全局变量的区别在于如果程序包含多个文件的话,它作用于定义它的文件里,不能作用到其它文件里,即被static关键字修饰过的变量具有文件作用域。这样即使两个不同的源文件都定义了相同名字的静态全局变量,它们也是不同的变量。

(5) 外部变量

   extern告诉编译器存在着一个变量和函数,即使编译器在当前的文件中没有看到它。这个变量或函数可能在一个文件或者在当前文件的后面定义。例如extern int i;编译器会知道i肯定作为全局变量存在于某处。当编译器看到变量i的定义时,并没有看到别的声明,所以知道它在文件的前面已经找到了同样声明的i。

(6) const常量

    const告诉编译器这个名字表示常量,不管是内部的还是用户定义的数据类型都可以定义为const。如果定义了某对象为常量,然后试图改变它,编译器将会产生错误。在C++中一个const必须有初始值。

(7) volatile变量

    限定词const告诉编译器“这是不会改变的”(这就是允许编译器执行额外的优化);而限定词volatile则告诉编译器“不知道何时变化”,防止编译器依据变量的稳定性作任何优化。

    从分配内存空间看:全局变量,静态局部变量,静态全局变量都在静态存储区分配空间,而局部变量在栈里分配空间


《第六篇》llama.cpp:纯 C/C++ 实现的大语言模型推理引擎详解 llama.cpp是一个纯C/C++实现的大语言模型推理引擎,由Georgi Gerganov开发。它通过量化技术将模型压缩为4bit/5bit/8bit等低精度格式,显著降低内存占用,使LLaMA等大模型能在消费级CPU上高效运行。项目采用自定义GGUF格式、优化KV缓存管理、多线程加速和SIMD指令等技术提升性能,支持LLaMA、Mistral等多种开源模型。具备跨平台、无需GPU依赖、内存占用低等特点,适合本地推理、嵌入式设备部署等场景,是隐私敏感型应用和教学研究的理想选择。 阅读详情

相关推荐

【数据库】“SQLite”+“DEV-CPP”实现C/C++嵌入式编程操作数据库

正如题目所言,最近笔者需要完成一个的任务,要求使用编程语言,由于笔者用不习惯系列软件,遂选用作为开发工具,由于之前没有相关经验,踩了许多坑,特此记录SQLite+DEV-CPP实现C/C++嵌入式编程操作数据库过程。...

TangPlusHPC的博客 4360

C/C++中作用域详解

作用域规则告诉我们一个变量的有效范围,它在哪儿创建,在哪儿销毁(也就是说超出了作用域)。变量的有效作用域从它的定义点开始,到和定义变量之前最邻近的开括号配对的第一个闭括号。也就是说,作用域由变量所在的最近一对括号确定。 (1) 全局变量: 全局变量是在所有函数体的外部定义的,程序的所在部分(甚至其它文件中的代码)都可以使用。全局变量不受作用域的影响(也就是说,全局变量的生命期一直...

weixin_34375054的博客 460

C/C++之cpp变exe

C/C++之cpp变exe 上节我们讲了C/C++的命名空间。 本节我们来介绍如何把源代码转换成软件。也就是标题所说的cpp变exe。 大家在使用vs等IDE的时候是不是发现很方便,只要写完源码,源码没错误的情况下,点一下生成就会得到可执行文件(exe)。 但是大家有没有想过其中的原理是怎么样的呢。所以本节通过这一点来展开做介绍。 点击生成解决方案就可以快速获得可执行文件,细心的同学可能会发现项目的Debug或者Release文件夹中,会有需多奇怪后缀的文件。例如我拿上节的方案Debug目录中的文

qq_44989173的博客 9548

原创 C++作用域 (一)

1概述 在所有的计算机程序中,一个基本的目标是操作一些数据,然后获得一些结果。为了操作这些数据,需要为这些数据分配一段内存,我们可以将这段内存称为变量。为了方便操作,以及程序可读性方面的考虑,需要使用一个有意义的名称来引用这段内存,这个名称就是变量名。 将名称和一段内存关联起来的工作可以分成两个阶段来进行,分别是变量的声明和定义。在变量声明的时候,只是引入了一个名称,该名称并没有和一...

advpf4370的博客 349

stable-diffusion.cpp: 纯C/C++实现的Stable Diffusion推理引擎

stable-diffusion.cpp为Stable Diffusion的部署和应用提供了一个高效、灵活的解决方案。随着社区的不断贡献和改进,相信stable-diffusion.cpp会在未来为更多Stable Diffusion的应用场景提供强大支持。stable-diffusion.cpp是一个纯C/C++实现的Stable Diffusion推理引擎,旨在提供一个轻量级、高性能、跨平台的Stable Diffusion部署方案。

helloaiworld的博客 2181

基于Jira与Confluence的企业知识库AI助手构建实战

检索增强生成(RAG)技术通过结合信息检索与大型语言模型,有效解决了AI在专业领域知识不足的问题。其核心原理是将外部知识库(如企业文档)进行向量化存储,在用户提问时进行语义检索,并将相关上下文注入提示词中,从而生成精准、有据可依的回答。这一技术架构在工程实践中价值显著,它无需重新训练模型即可让AI掌握特定领域的专业知识,大幅提升了回答的准确性与实用性。典型的应用场景包括智能客服、企业内部知识问答以及代码辅助等。本文以开源项目`dev-kostiuk/jira-confluence-ai-context`为例

weixin_42520448的博客 368

C++ 作用域使用规范建议

1.名字空间(Namespaces)C++在C的基础上引入了名字空间机制,使C中作用域的级别从原有的文件域(全局作用域)和局部域(函数作用域和代码块作用域)中间增加了名字空间域和类域。名字空间是ANSIC++引入的可以由用户命名的作用域,用来处理程序中常见的同名冲突。优点:命名空间提供了(可嵌套)命名轴线(name axis,注:将命名分割在丌同命名空间内),当然,类也提供了(可嵌套)的命名轴线(注

Doublelv 的博客专栏。 2403

WRF-BEM相关参数说明

本参数适用于WRF-BEM模拟武汉市气候。

m0_60013472的博客 1896

C++ 函数作用域

变量作用域 局部作用域、全局作用域、文件作用域   局部变量:也称内部变量,声明在函数内(包括main函数),作用域开始于变量声明之处,结束于函数或块结束处;   全局变量:也称外部变量,声明在函数外,作用域一般是整个程序源文件,作用域最广,甚至可以作用于组成该程序的所有源文件(比如,将多个独立编译的源文件链接成一个程序时,在某个源文件中声明的全局变量,在与该源文件相链接的其他源文件中也

ForestRound的博客 9727

基于遗传算法的柔性作业车间调度(初始化以及编码策略)

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

菜鸡 8596

现代 AI Agent 编排技术全景(1)—— 分类体系与四大技术维度

本文介绍基于 LLM 的现代 Agent 分类体系与四大技术维度,形成能够刻画不同 Agent 产品架构特征的分类法

佚失的诗篇 238

C++的作用域、变量作用域、生命周期和变量分类介绍

C++的作用域、变量作用域和变量分类介绍。 变量作用域(Variable Scope)是指变量的生命周期和可见性,也就是变量在程序中的哪些部分可以使用。按照作用域(Scope)变量可分类为全局变量和局部变量。 还可按照生命周期(Lifetime)进行分类变量可分类为静态变量(Static Variables)和成员变量(Member Variables)。

cnds123的专栏 6538

毕设加分项!手把手教你完成基于YOLOv8与PyQt5的多类别目标检测系统——让你的毕设从“完成”到“出色”

从KITTI数据集处理,到YOLOv8模型训练,再到PyQt5界面开发,整个流程其实没有想象中那么难。只要你跟着步骤一步步来,不仅能顺利完成毕设,还能掌握目标检测和GUI开发的核心技能——这些技能在未来的求职、读研中都非常实用。如果过程中遇到问题,别担心!可以去YOLOv8的官方文档、PyQt5论坛找答案,也可以和同学、老师交流。记住,完成毕设的过程也是你技术成长的过程,坚持下去,你会为自己的成果感到自豪。

m0_71589036的博客 179

C/C++ 知识点:| 与 || 的区别

虽然和||在某些情况下可能看起来行为相似,但它们是两种不同的运算符,用于不同的目的。理解它们之间的区别对于编写正确的C++代码至关重要。按位或运算符用于位操作,而逻辑或运算符||用于逻辑判断。在使用这些运算符时,始终要注意上下文和预期的行为,以确保代码的正确性和效率。

个人技术博客 2214

手机相机Tuning专项调优(一):基础流程与图像主观评价标准建立实战解析

本篇为手机相机系统“Tuning专项调优”系列的开篇,深入剖析了当前手机相机Tuning的基本流程与图像主观评价标准的构建方法。结合实际工程经验与最新业界案例,详细介绍ISP调优和3A控制中涉及的主观评价标准,如锐度、色彩饱和度、噪声感知等,并提出一套可工程化落地的标准制定与评测实践体系,帮助工程师有效提升图像品质。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1935

在Ubuntu上安装Node.js编程

在Ubuntu操作系统上安装Node.js是非常简单的,本文将为您提供详细的安装步骤。这是一个简单的Node.js HTTP服务器示例,它将在本地主机的端口3000上监听请求,并返回"Hello, World!npm是Node.js的包管理器,您可以使用它来安装和管理Node.js模块。您已成功在Ubuntu上安装了Node.js,并创建并运行了一个简单的Node.js应用程序。现在,您已经成功安装了Node.js和npm,让我们创建一个简单的Node.js应用程序并运行它。如有任何疑问,请随时提问。

CodeNexus的博客 3524

在VScode下配置C/C++环境(tasks.json、launch.json、c_cpp_properties.json)

tasks.json在编译首先运行hello.c文件(点击右上角的运行图标),再点击"C/C++:gcc.exe生成和调试活动文件",如图2所示。图2 运行当前活动文件经过步骤1,在工作区code文件夹下可以生成一个文件,如下图3所示。除了tasks.json配置文件外,launch.json、c_cpp_properties.json配置文件也放在.vscode文件夹下。图3 产生的tasks.json文件tasks.json文件配置内容如下。在配置路径时只能使用\\或隔开目录。"tasks": [

m0_46610658的博客 3万+

【超分辨率(Super-Resolution)】关于【超分辨率重建】专栏的相关说明,包含专栏简介、专栏亮点、适配人群、相关说明、阅读顺序、超分理解、实现流程、研究方向、论文代码数据集汇总等

本专栏研究领域为【超分辨率重建】,涵盖图像超分、视频超分,实时超分,4K修复等方面。主要内容包括主流算法模型的论文精读、论文复现、毕业设计、涨点手段、调参技巧、论文写作、应用落地等方面。算法模型从SRCNN开始更新至今,一般是一篇论文精读对应一篇论文复现。论文精读详解理论,归化繁为简,归纳核心,积累词句,培养阅读论文和论文写作能力。论文复现依托Pytorch代码,实现完整的模型训练流程,总结调参方法,记录碰到的bug,论文插图可视化,培养读写代码能力、做实验的能力、以及应用落地能力。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 3万+

C/C++ 引用详解

C/C++ *和& 详解 C/C++中 * 的用法 1>最简单的乘法: a*b; 2>可以注释: /**/ 3>指针:(最重要) 指针是指向变量的地址 简单的例子分析: int main() { int a = 3...

秦小茗同学 7793

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【Cpp】C和C++混合编程

一、混合编程杂绪 1.1 为什么需要混合编程 Cpp是从C演变过来的,C有很多优秀成熟项目和库,没必要在C++中重写,C++程序可以直接调用调用 庞大项目划分后一部分适合用C(底层),一部分适合用C++(中间层、上层) 1.2 混合编程的支撑 编译型程序的编译过程:源文件->目标(库)文件->可执行程序->镜像文件 任何编程语言执行时都必须是可执行程序,所以都必须先被编译成...

baymaxly的博客 7735

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【C/Cpp】在C中的Cpp

由于我们对Cpp的框架还不够了解,在此我这一篇章进行对Cpp语法的拆分(没错,这个Cpp的坑也算是填起来了),Cpp对于学过C的人来说好像似曾相识,两种差别并不是很多,但是为何Cpp有了如此高效的效率?Cpp对C的特征进行了一些修改,Cpp更为复杂的特性将会在后面中介绍。数据类型(datatype)定义使用存储空间(内存)的方式。通过定义数据类型,告诉编译器怎样创建一片特定的存储空间,以及怎样操纵这片存储空间。数据类型可以是内部的或抽象的。内部数据类型是编译器本来能理解的数据类型,直接与编译器关联。C和。

Mongxin_Chan的博客 1352

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

C/C++开发环境

如同, 缺少了对cJSON的编译,这里对成员函数的所需的c/cpp文件未被编译。也就是按单文件编译方法对多文件进行编译。解决办法:在tasks.jason 中设置源文件,将"args"的值语言CC++C/C++这里的 ${fileDirname} 表示当前目录。

Watom_663的博客 3303

如何在VSCode上运行C/C++代码

本文介绍如何在VSCode上运行C/C++代码

诸神缄默不语的博客 1万+

[原创]C/C++语言中,如何在main.c或main.cpp中调用另一个.c文件

  C/C++语言中,如何在main.cpp中调用另一个.c文件主要有5种思路:   1、在VS2012 IDE中,将被引用的.c文件后缀名全部修改为.h,然后通过IDE的解决方案资源管理器中鼠标右键单击“头文件”-"添加"-“现有项”,选中修改后缀名后的.h文件-"添加",将待引用的文件添加到工程中。   添加到“头文件”而不是“源文件”的作用:主要是使头文件的项类型属性为“C/C++ 标头”...

weixin_33834628的博客 2994

C/C++语言中,如何在main.c或main.cpp中调用另一个.c文件

C/C++语言中,如何在main.cpp中调用另一个.c文件主要有5种思路:   1、在VS2012 IDE中,将被引用的.c文件后缀名全部修改为.h,然后通过IDE的解决方案资源管理器中鼠标右键单击“头文件”-"添加"-“现有项”,选中修改后缀名后的.h文件-"添加",将待引用的文件添加到工程中。   添加到“头文件”而不是“源文件”的作用:主要是使头文件的项类型属性为“C/C++ 标头”,而不是“C/C++ 编译器”。后者是将该文件独立编译成目标文件*.obj。用户可右键单击某个.h文件-属性-

云海唯C的专栏 1万+

vscode搭建C/C++环境

在vscode中配置C/C++环境,教程包括从软件下载安装到配置环境的所有步骤。

TENET123的博客 2699
上一篇: ros 编译出现的问题
下一篇: [转] linux下ssh远程登录服务器入门操作
sherryyang1234
博客等级 码龄10年 13粉丝 118原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值