c语言中的static和extern关键字

anaconda安装-超详细版 文章目录一、anaconda安装1.1 anaconda安装地址1.2 安装详细步骤检验安装是否成功更改conda源(后续安装第三方库可以加快速度) 一、anaconda安装 Anaconda 是一个用于科学计算的 Python 发行版,支持 Linux, Mac, Windows, 包含了众多流行的科学计算、数据分析的 Python 包。装anaconda,就不需要单独装python了。 anaconda优点: 1、anaconda里面集成了很多关于python科学计算的第三方库,主要是安装方便,而p 阅读详情

c语言中的static和extern关键字

 

资料1

1、  概念基础:

局部变量:函数内部定义的变量(包括定义在函数内部复合语句中的变量)。

全局变量:定义在函数外部的变量。

作用域:任何标识符(包括变量、函数名、符号常量及新的数据名)都有它的作用范围,此范围称为该标识符的作用域。比如符号常量的作用域是从定义符号 常量的地方开始到包含这个#define命令(作用于该符号常量)的文件末尾或者遇到#undef命令(作用于该符号常量)为止。

 

2、  对于变量:

static关键字:static可以用于修饰局部变量以扩展局部变量的生存期 ,被static关键字修饰的局部变量的生存期为:在调用该变量所在的函数前已生成,直到程序退出才消亡,因此在调用该局部变量所在的函数后该变量仍然存在并保持最后使用的值。虽然static关键字可以改变局部变量的生存期,但是不能改变局部变量的作用域,该局部变量仍然只能在定义它的函数中使用。

        static关键字也可可用于修饰全局变量,此时它的作用在于限制该全局变量的作用域,只能在定义该全局变量的文件中才能使用。

 

extern关键字:只能用于扩展没有被static关键字修饰的全局变量 。 默认情况下全局变量只能在定义它的文件中使用(从定义该全局变量开始到所在文件的文件尾),但如果在另一个文件中将这个变量声明为外部变量,那么这个变量 的作用域将被扩展到另外一个文件中。也可以在定义全局变量之前声明该变量,从而在文件中可以在定义该全局变量前使用该全局变量。

 

3、  对于函数:

static关键字:在定义函数时在函数首部的最左边加上static可以把该函数声明为内部函数(又叫静态函数),这样该函数就只能在其定义所在的文件中使用,如果在不同的文件中有同名的内部函数,则互不干扰。

 

extern关键字:在定义函数时如果在函数首部的最左端冠以关键字extern,则表示此函数是外部函数,可供其他文件调用。C语言规定,如果在定义函数时省略extern,则隐含为外部函数。

        在文件中要调用其他文件中的外部函数,则需要在文件中用extern声明该外部函数,然后就可以使用。

 

资料2

1、用static、extern可以声明变量

 

1.1 可用static声明全局变量和局部变量(包括数组)。

(1)用static声明的局部变量只能被定义该变量的函数识别,在退出函数时该局部变量仍然保持其值,

e.g. void temp()

{

static int array[]; //静态局部变量

......

}

用static声明局部数组可以避免在每次调用函数时都建立和初始化数组,以及在每次退出函数时撤销数组,缩短程序执行时间。

(2)用static声明静态外部变量,可以限定外部变量只被本文件引用 ,不会被其他文件引用.为文件的模块化、通用性提供方便.

e.g. file1.c(file1文件)

static int A; //静态外部变量

main(){ }

注意:外部变量和静态外部变量都是静态存储的,只是作用范围不同.

 

 

1.2 存储类别说明符extern

extern外部变量的作用域是从变量定义处开始,到本程序文件的末尾.

(1)在一个文件内声明外部变量

用extern声明外部变量以扩展它在程序文件中的作用域

e.g. main()

{

extern int A,B; //外部变量声明

......

}

int A=14,B=-3; //定义外部变量

(2)在多文件的程序中声明外部变量

如一个程序包含多个文件,在一个文件中定义外部变量,在其他文件中extern做外部变量声明.

e.g. 文件file1.c中定义

int A;

文件file2.c中

extern int A; //作用域扩大,不再分配内存

 

 

2、用static、extern可以声明函数

(1)内部函数(静态函数)-用static声明

用static声明的内部函数,只能被本文件中的其他函数调用,调用范围只局限与所在文件,不同文件中有同名的内部函数,互不干扰.

e.g. static int fun(int a,int b)

(2)外部函数-用extern声明

★用extern声明的外部函数可供其他文件调用.一般没有任何声明的函数都是外部函数.

e.g. extern int fun(int a,int b)

★在需要调用此函数的文件中.用extern声明所用的函数是外部函数.

e.g. file1.c(file1文件)

main()

{

extern printf_string(char str[]); //声明在本函数中要调用其他文件中的函数

......

}

file2.c(file2文件)

void printf_string(char str[])

{......}

注意:extern可以省略,如使用#include<math.h>,可在文件中直接调用其中的函数.

 

 

3、标识符有四种作用域:函数作用域、文件作用域、块作用域、函数原型作用域。

(1)标号(跟有冒号的标识符,如start:)是唯一具有函数作用域的标识符。编号可用于函数中任何地方,但不能在函数之外引用。用在swtich结构(case:)和goto语句中。

(2)函数之外的全局变量、函数声明和函数原型具有文件作用域,

e.g. extern x=10;

void temp(void);

(3)static声明的局部变量具有块作用域,

e.g. void temp(void)

{

static int x=10;

}

(4)用在函数原型参数列表中的标识符具有函数原型作用域,

e.g. void temp(const [],int);

1、数组传递给函数,模拟传引用调用的方式自动把数组传递给函数,意味着被调用的函数能够修改原是数组的元素值,

e.g. int hourly[24]; //数组定义

void modify(int [],int ); //函数原型

modify(hourly,24); //函数调用,数组名即数组第一个元素的地址

注意:为了防止函数中修改数组的值,采用类型限定符const做前缀,数组元素成为函数体中的常量,函数体中任何修改数组元素的企图都会导致编译错误,

e.g. void modify(const int [],int );

 

2、字符数组

字符串读取:scanf("%s",string1); //不用地址符号&,因为数组名是数组的起始地址

字符串显示:printf("%s",string1);

e.g. char string1[]="good girl"; //字符串

char string1[]={'g','o','o','d','/0','g','i','r','l','/0'}; //上下声明等价

注意:'空字符'='/0',终止符,用printf("%s",string1)输出,得到good girl。

 

3、多维数组

e.g. int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

假设数组起始地址2000,则

表示形式 含义 地址

a 指向a[0],即0行首地址。 2000

a[0],*(a+0),*a 第0行第0列元素地址 2000

a+1,&a[1] 第1行首地址 2008

a[1],*(a+1) 第1行第0列元素地址 2008

a[1]+2,*(a+1)+2,&a[1][2] 第1行第2列元素地址 2012

*(a[1]+2),*(*(a+1)+2),a[1][2] 第1行第2列元素的值 7

在二维数组中,a+i=a[i]=*(a+i)=&a[i]=&a[i][0],即他们的的地址值是想等的。

 

 

资料3


DE>文件a. c
static int i; //只在a文件中用 
int j;   //在工程里用 
static void init( )         //只在a文件中用 
{ 
} 
void callme( )          //在工程中用 
{ 
   static int sum; 
} 
DE>

上 面的全局i变量和init()函数只能用在a.c文件中,全局变量sum的作用域只在callme里。变量j和函数callme()的全局限扩充到整个工 程文件。所以可以在下面的b.c中用extern关键字调用。extern告诉编译器这个变量或者函数在其他文件里已经被定义了。

DE>文件b. c
extern int j;    //调用a文件里的 
extern void callme( ) ; //调用a文件里的 
int main( ) 
{ 
  . . . 
} 
DE>

extern的另外用法是当C和C++混合编程时如果c++调用的是c源文件定义的函数或者变量,那么要加extern来告诉编译器用c方式命名函数:

DE>文件A. cpp调用a. c里面的变量i和函数callme( ) 
extern "C" //在c++文件里调用c文件中的 变量
{
   int j; 
    void callme( ) ; 
}
int main( ) 
{
    callme( ) ; 
}

手把手教你学GPU的KMD专栏--2.4 GPU固件加载与初始化流程 GPU固件(Firmware)是嵌入在GPU芯片ROM或EEPROM中的低级代码,是GPU启动时首先执行的程序。它负责GPU硬件的基础初始化和基本功能配置,是GPU与操作系统之间的"第一道桥梁"。与操作系统驱动不同,固件在CPU启动后、操作系统加载前就已执行,是硬件层面的"启动代码"。关键认知:GPU固件是GPU的"BIOS",没有它,GPU硬件无法进入可操作状态。就像CPU需要BIOS来初始化内存和外设一样,GPU需要固件来初始化其核心组件。 阅读详情

相关推荐

从零构建OpenBMC风扇控制:基于phosphor-pid-control的实战配置指南

本文详细介绍了如何从零开始构建OpenBMC风扇控制系统,基于phosphor-pid-control框架实现风扇自动调速。通过解析PID算法配置、传感器定义及控制区域设置,提供工业级散热解决方案,帮助开发者优化服务器能效与可靠性。

weixin_29263201的博客 748

C语言——二维数组

一:定义: 存储类型 数据类型 二维数组名[行大小][列大小] 存储类型:auto(默认),register,static,extern 数据类型:char,short,int,long,float,double 数组名:标识符,数组名是地址常量,是数组的起始地址,代表数组整片空间 []:偏移符 arr[0][0]不等于arr[0],前者代表第0行的第0个元素的首地址,后者代表第0行的首地址,其值相等,但其偏移量不同,若同时偏移一个单位,前者偏移一个元素,后者偏移一行元素。

qq_56434030的博客 878

Docker版OnlyOffice中文字体配置全攻略:从字号调整到字体添加

本文详细介绍了在Docker版OnlyOffice中配置中文字体和调整字号的完整方案。通过容器内操作和配置文件修改,实现中文标准字号映射及思源、阿里巴巴等优质字体的集成,提升文档排版的规范性和专业性。特别针对企业级部署提供了性能优化建议和常见问题解决方案。

weixin_28309571的博客 137

二维数组与变量总结

/* * 1. 动态开辟二维数组 * 2. extern 关键字 -> 外部的 * a.cpp 定义 int a = 222; * b.cpp 使用 a变量。先声明变量a extern int a; 源文件中已经定义过a,编译器LINK 变量 * 3. 变量:普通局部变量: 函数中定义的变量 .stack 只声明未定义 随机 普通全局变量: 函数外定义的变量 .data 只声明未定义 类型默认值 stati...

weixin_52485836的博客 907

【CAD】【手把手带你写一个DXF&JAVA解析框架】02——整理DXF元数据实体类,涵盖重要属性与对照组码

本文系统梳理了DXF文件解析中的核心元数据类,重点分析了Tables段(图层、块记录)、Blocks段和Entities段的关键数据结构。通过详细的组码说明和对照代码实现,阐述了图层定义(DXFLayer)、块记录(DXFBlockRecord)、应用程序标识(DXFAppId)等表对象的属性构成;同时解析了直线(DXFLine)、多段线(DXFLwPolyLine)、圆弧(DXFArc)、文字(DXFText)等实体类的几何特征与属性定义。文章还构建了顶点(Vertex)、基类(DXFEntity、DXF

Wonder ZH 268

RT-Thread精通PM功耗调优 - Tickless篇

背景 让别人的思想装到自己的脑袋里,这不仅需要威逼利诱,还需要讲清楚原理。喜欢才能接受。 功耗基本的调试手段,估计前面讲了很多,或许只有少数人群可以接受。 更有极少的人,了解了整个功耗管理的体系、原理,愿意接受这样的【安排】。 这里的功耗调优思路,其实只是解决功耗问题的一种思路,并不是框架。 解决问题,自古以来,都是千奇百怪,秒在【奇】。 介绍 本篇介绍下Tickless的工作原理。 Tickless 可以理解为:tick-less,tick or little tick。 tick定.

坚韧与专注 1529

探究二维数组

1. 引言对N x M的二维数组来讲,设其数组名为array。指针array指向一个数组,该数组存放的是一系列指针,这些指针分别指向相应的一维数组,而这些数组中存放的才是我们的数据。2. 二维数组声明和定义2.1 静态分配内存int array[3][10]; //定义 int array[3][10] = {{0},{0},{0}}; //初始化 extern int array[3][10];

Time is a choice 742

Vue3 - 完美解决高德地图定位失败 Get ipLocation failed.Geolocation permission denied.(获取ipLocation失败。地理定位权限被拒绝。)

Get ipLocation failed.Geolocation permission denied.,vue3引入高德地图当前定位失败 ,vue3中使用高德地图定位报错,高德地图API用户定位失败,高德地图H5 定位失败报错排查和解决方案,微信公众号H5网页高德地图定位报错,谷歌浏览器-高德地图定位失败geolocation,getCurrentPosition 返回的 message报错,如何解决此问题,uniapp h5高德地图,微信、QQ等内置浏览器定位失败,高德地图实现实时用户位置定位,引入高德

🏆 前端领域优质创作者 4172

C 二维数组和指针、函数指针、typedef等的一些笔记

文章目录二维数组二维数组名不能传递给二级指针数组名 二维数组 char a[5][24] = {0}; printf("%p\r\n", a); printf("%p\r\n", a[0]); printf("%p\r\n", *a); printf("%p\r\n", &a[0][0]); printf("%d\r\n", sizeof(a)); printf("%d\r\n", sizeof(a[0])); printf("%d\r\n", sizeof(*a)); printf("%d\

xfxuezhang.cn 1万+

无人驾驶Autoware导读

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!本文先对无人驾驶Autoware介绍做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容。

qq_35635374的博客 2397

主题045:四足机器人的运动仿真

四足机器人(Quadruped Robot)是模仿哺乳动物四肢运动设计的机器人系统,具有优异的地形适应性和运动稳定性。与双足机器人相比,四足机器人在静态和动态稳定性方面具有天然优势,能够在复杂地形(如楼梯、斜坡、碎石地面)上稳定行走,因此在野外探索、救援任务、军事应用等领域具有广阔的应用前景。本教程将介绍四足机器人的运动学建模、步态规划、稳定性分析和控制策略,并通过Python仿真验证相关理论。典型的四足机器人每条腿包含3个关节:常见的腿部构型包括:对于单腿,足部位置 pfoot\mathbf{p}_{fo

kkchenjj的博客 682

C语言关键字static与extern的详细解释

参考原文地址(static):https://blog.youkuaiyun.com/keyeagle/article/details/6708077 参考原文地址(extern):https://www.cnblogs.com/Lunais/p/5991135.html C语言中的static与extern是C语言32个关键字中的比较重要的两个内容,也是我近期在学习C++过程中理解较为晦涩的部分,为此,...

zhongshengxuexi_的博客 7765

第4篇:使用 NModbus 库快速搭建 Modbus TCP 通信(从零开始用 C# 开发 Modbus 上位机)

本文介绍了如何使用 NModbus 库快速搭建 Modbus TCP 上位机通信程序。通过安装 NModbus4 NuGet 包,开发者可以轻松实现 Modbus TCP 连接,无需手动处理底层协议细节。文章详细演示了核心功能实现: 创建 TCP 客户端连接设备 读取保持寄存器(功能码0x03) 写入单个寄存器(功能码0x06) 关闭连接释放资源 提供完整C#示例代码,包含初始化连接、数据读写等关键操作,帮助开发者快速构建Modbus TCP通信应用。相比手动实现,NModbus库大幅简化了开发流程,特别适

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1045

【C语言】详解static和extern关键字

在本文中,介绍了变量的作用域和生命周期,还说明了static和extern两个关键字以及它们如何使用。

tianxiawushanu的博客 1658

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

老版QQ原生表情gif动态

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

C语言const、static、extern、volatile关键字总结

一、const 关键字总结: 作为一个程序员,我们看到关键字const时,首先想到的应该是:只读。因为,它要求其所修饰的对象为常量,不可对其修改和二次赋值操作(不能作为左值出现)。看几个例子的中const作用: 1. 修饰常量 用const修饰的变量是不可变的,对const变量赋值:一是在声明时对变量初始化,二是在函数中声明const形参,函数调用时会得到实参的值。以下两种定义形式在本质上是...

心中的日月的博客 5179

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

C语言——难点关键字(extern、static、struct、enum、union、volatile)

重点关键字extern、static、struct、enum、union、volatile详解

脑壳有点痒,好像要长脑子了! 3844

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

C语言中常见关键字(static,extern)

/ 错误:无法访问file1.c中的static全局变量。// 静态全局变量,仅在file1.c中可见。(生命周期),使其从自动存储期(函数调用结束后销毁)变为静态存储期(程序运行期间一直存在)。当你有一个全局变量定义在一个文件中,并希望在另一个文件中访问它时,你可以使用。其他源文件无法访问该变量。:用于限制全局变量的作用域,避免其他文件访问,增强模块化。// 输出: Count: 1。:仅限于定义它的源文件(文件作用域)。:与程序的生命周期相同(静态存储期)。:与程序的生命周期相同(静态存储期)。

weixin_48867130的博客 1305

C语言中static与extern关键字的深入解析

static和extern虽然都是用来修饰变量和函数的关键字,但它们的作用完全不同。static关注的是变量或函数的作用域和生命周期,而extern则关注变量或函数的可见性和链接属性。在实际编程中,合理使用这两个关键字可以显著提升代码的模块化程度和可维护性。

极客代码 1410

【c语言】static和extern关键字详解

在C语言中,static 和 extern 是两个重要的关键字,它们用于控制变量和函数的作用域以及链接属性。static 是 静态的 的意思,可以用来:• 修饰局部变量• 修饰全局变量• 修饰函数extern 是用来声明外部符号的。提示:以下是本篇文章正文内容,下面案例可供参考作用域决定了变量在程序中的可见性,即它们可以在哪些地方被访问。生命周期决定了变量的存在时间,即它们在何时被创建和销毁。合理控制变量的作用域和生命周期是编写高效、可维护程序的关键。

m0_68002296的博客 1717

C语言extern和static关键字详解

在讲extern和static关键字前,先讲几点相关的基础知识——作用域、存储类型、链接属性。这是几个相关性强,且容易混淆的概念。如果这几个概念理解了,再理解extern和static关键字的用法,就很容易。...

Sup_klz的博客 1055

C语言——static和extern关键字

在了解和和。

2203_76003626的博客 921

C语言中的关键字static和extern

今天作者菌又来补充一些很有用的知识,感兴趣的uu们不要吝啬手中的三连啊,感恩比心。好,废话不多说,正式开始我们今天的学习。

2302_79964175的博客 1259

C语言之函数,以及static和extern关键字

本文将仔细介绍C语言函数的基础知识,主要包括库函数和自定义函数两类,介绍库函数的使用以及查阅,介绍自定义函数的定义语法、实参与形参、嵌套调用以及链式访问等,介绍static和extern关键字的作用和使用建议,希望对大家有所帮助

x_p96484685433的博客 1457

C语言关键字——static和extern

我们可以看到第一段代码可以正常运行,第二段代码报了错。

2301_79697817的博客 885

C语言关键字const, static, extern, volatile总结

一、const 关键字总结: 作为一个程序员,我们看到关键字const时,首先想到的应该是:只读。因为,它要求其所修饰的对象为常量,不可对其修改和二次赋值操作(不能作为左值出现)。看几个例子的中const作用: 1. 修饰常量 用const修饰的变量是不可变的,对const变量赋值:一是在声明时对变量初始化,二是在函数中声明const形参,函数调用时会得到实参的值。以下两种定义形式在本质上是一样的: const int a = 10; int const a = 10; .

fhb1922702569的博客 1587

C语言关键字static和extern

⽣命周期指的是变量的创建(申请内存)到变量的销毁(收回内存)之间的⼀个时间段。

bite_free的博客 1024
上一篇: 关于进程间通信如果传输的是结构体数据
下一篇: cJson库的使用
令狐不冲
博客等级 码龄15年 2粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值