当前位置:网站首页>C语言-关键字1
C语言-关键字1
2022-06-24 19:25:00 【programing菜鸟】
auto
变量的作用域:
- 变量可以作用的范围。一般都是花括号里面。
变量的生命周期:
- 变量从被创建到销毁所经历的时间。
可以认为局部变量都默认是auto的,但是你不写编译器也知道。该关键字几乎不用了。
register
当你使用register去修饰一个变量时,编译器会尽可能将该变量放在CPU的寄存器中而非内存中,所以CPU访问该变量的速度是很快的。
几点注意:
- 1,register修饰的最好是局部变量。因为全局变量会一直占用寄存器。
- 2,不会被写入。写入就要写回内存。那么该变量设为register就没有意义。
- 最好是高频读写的。
- 无法被&符号取地址。
- 不要被大量使用,因为寄存器有限。
为什么要有头文件
很多时候我们有这样的需求:在一个源文件中使用另一个源文件的函数或者变量。那么能不能直接使用呢?
- 函数可以,但是会警告,函数只要链接找到就可以。(只限于自己写的函数,想要使用库函数或者别的函数必须包含声明)。
- 而变量必须声明过才可以使用,且不能在声明的时候赋值。因为声明不开辟空间。
但是如果我有100个源文件,每个源文件都要使用同一个全局变量,那么怎么办呢?我难道要写100遍声明吗?
所以,一个好的处理方法就是,将这些声明提取到1个共用的文件中,以便于项目的维护。而这个文件就是头文件。而每个想要使用其中变量或者函数的源文件,只需要包含该头文件即可。
- 头文件包含的内容:

static
我们知道了全局变量和函数是可以跨文件的。而函数甚至不用声明就可以使用。那么有没有办法保证你的函数无法直接被其他源文件使用呢?
- static修饰全局变量,表示该变量只能在源文件内部使用。改变了该变量的作用域。但是可以间接使用。
- static修饰函数,表示该函数只能在该源文件内部使用。但是可以嵌套式的间接使用。
- static的特性为C语言提供了封装性的可能。保证了项目的安全性。
/************* test.c文件 ***************/
static int g_val = 100; //g_val无法被外部文件直接访问。因为static
int show_val() {
printf("%d\n", g_val); //但是可以通过show函数访问;因为show函数可以被其他源文件访问
}
static void test(){
//被static修饰,无法被外部直接访问
// do something...
}
void show_test(){
test(); //但是可以通过嵌套,间接访问
}
- static修饰局部变量,该变量的生命周期
extern
- 在变量前面,表示声明该变量。全局变量声明必须带上extern,否则就可能引起编译器的二义性。不带上无法分辨是定义还是声明。
- 函数可以不带,因为编译器可以分辨出函数的定义和声明,但是为了保持好习惯,建议带上。

边栏推荐
- Use of kubernetes storage volumes
- 123. 买卖股票的最佳时机 III
- Network layer
- MySQL optimizes query speed
- 123. the best time to buy and sell shares III
- 2022国际女性工程师日:戴森设计大奖彰显女性设计实力
- CondaValueError: The target prefix is the base prefix. Aborting.
- Minimum cost and maximum flow (template question)
- 自己总结的wireshark抓包技巧
- Foundations of Cryptography
猜你喜欢

关于Unity中的transform.InverseTransformPoint, transform.InverseTransofrmDirection

The virtual currency evaporated $2trillion in seven months, and the "musks" ended the dream of 150000 people becoming rich

Bld3 getting started UI

基于STM32的物联网下智能化养鱼鱼缸控制控制系统

Big factories go out to sea and lose "posture"

memcached完全剖析–1. memcached的基础

Pod lifecycle in kubernetes

Intelligent fish tank control system based on STM32 under Internet of things

ping: www.baidu.com: 未知的名称或服务

123. 买卖股票的最佳时机 III
随机推荐
TCP specifies the source port
Understanding openstack network
Big factories go out to sea and lose "posture"
一文理解OpenStack网络
CondaValueError: The target prefix is the base prefix. Aborting.
PHP script calls command to get real-time output
Different WordPress pages display different gadgets
memcached全面剖析–2. 理解memcached的內存存儲
Introduction to interval DP
Implementation of adjacency table storage array of graph
[cloud native learning notes] learn about kubernetes' pod
Php-pdo parameter binding problem
使用 Go 编程语言 66 个陷阱:Golang 开发者的陷阱和常见错误指北
【Camera基础(二)】摄像头驱动原理和开发&&V4L2子系统驱动架构
VSCode无网环境快速迁移开发环境(VIP典藏版)
B站带货当学新东方
关于Unity中的transform.InverseTransformPoint, transform.InverseTransofrmDirection
Network flow 24 questions (round table questions)
Unity关于本地坐标和世界坐标之间的转换
架构实战营 第 6 期 毕业总结