【C 语言极简自学笔记】深入解析C 语言关键字typedef、static 及#define定义常量和宏的本质

初识C语言(三)——关键字、#define定义标识符常量和宏 1.每个人的际遇不同,成功总有早晚,但肯定离不开两样东西,一是努力,二是格局。 2.不知道是越来越独立 ,还是越来越心虚, 走了这么久, 发现唯一靠得住的还是自己,只有你把自己变好了,你足够强大了,才不会在意他人。 3.今天你不用力走,明天就要用力跑。如果无法避免,那我们能做的,不过只是把自己变得更强大,强大到能够应对下一场挑战。 阅读详情

一.关键字typedef:类型抽象的艺术

typedef的核心功能是为已有类型定义别名,其本质是类型抽象,而非创造新类型,也就是类型重定义。

typedef unsigned int uint;

int main()
{
    unsigned int sum1 = 1;
    uint sum2 = 0;
    return 0;
}

 含义:unsigned int 经过typedef重定义之后,等价于uint

误区:typedef 不是类型转换,不能改变变量的类型本质,

二.关键字static:生命周期与作用域的控制者

static关键字通过改变符号的链接属性和存储类型,实现对变量 / 函数的精确控制

1.修饰局部变量

特性:

  • 存储在静态存储区(而非栈区)
  • 仅初始化一次
  • 作用域仍为局部,但生命周期延续到程序结束
void test()
{
    int a = 1;
    a++;
    printf("%d\n", a);
}
int main()
{
    int i = 0;
    while(i < 10)
    {
        test();
        i++;
    }
    return 0;
}

 

此时a变量没有被static修饰,为局部变量,每一次循环过程中出作用域之后会被销毁

void test()
{
    static int a = 1;
    a++;
    printf("%d\n", a);
}
int main()
{
    int i = 0;
    while(i < 10)
    {
        test();
        i++;
    }
    return 0;
}

 

此时a变量被static修饰,为局部变量,每一次循环过程中出作用域之后不会被销毁。

static修饰局部变量时,局部变量出了作用域不销毁。本质上,static修饰局部变量的时候,改变了变量的存储位置(从栈区变到静态区),影响了局部变量的生命周期,生命周期变长的和程序一样长。 

2.修饰全局变量

作用:将全局变量的作用域限制为当前文件(内部链接)

// file1.c
static int globalVar = 10;  // 仅在file1.c中可见

// file2.c
extern int globalVar;       // 编译错误:无法找到该符号

全局变量有外部链接属性,即另一个源文件可以通过extern来声明变量后调用该全局变量。而当static修饰全局变量的时候,这个全局变量的外部链接属性就变成了内部链接属性,即其他源文件(.c)就不能再使用到这个全局变量了 。

3.修饰函数

作用:将函数的作用域限制为当前文件,常用于实现模块化封装

//test1.c

static int ADD(int x ,int y)
{
     return x + y;
}

//test2.c

extern int ADD(int x,int y);
int main()
{
    int a = 10;
    int b = 20;
    int c = ADD(a,b);
    printf("%d\n",c);
    return 0;
}//编译错误,找不到ADD(int x,int y)

函数具有外部链接属性,static修饰函数时,外部链接属性就变成了内部链接属性,其他源文件就不能再调用这个函数了。 

三.#define

#define是 C 语言预处理器指令,用于定义宏。宏可以是简单的常量替换,也可以是带参数的函数式宏。

1.#define定义标识符常量

#define NUM = 10;
int main()
{
    printf("%d\n",NUM);//10
    int n = NUM;
    printf("%d\n", n);//10
    int arr[NUM] = {0};
    return 0;
}

2.#define定义宏

#define ADD(x,y) ((x)+(y))
int main()
{
    int a = 10;
    int b = 20;
    int c = ADD(a,b);
    printf("%d\n",c);
    return 0;
}

其中ADD为宏名,x和y为宏参数,((x) +(y))为宏体。

故人讲c之初学者也能玩的明白的关键字,指针与结构体 本篇文章详细介绍了关于初学者应该知道的关于常见关键字,define有什么作用,应该如何使用?关于C语言中的一大难点,指针应该如何入手?还有关于复杂对象该如何定义?相信大家看了凡人本篇文章有了个大概轮廓,以后详细介绍会放到以后讲解,先让大家了解了解,如果觉得凡人写的还不错,希望三连,感谢大家观看!!! 阅读详情

相关推荐

AI驱动的CNC闭环加工系统:边缘实时控制与IIoT反馈实践

闭环控制是工业自动化的核心概念,指通过实时反馈调节系统输出以逼近目标值;其技术原理在于构建短于被控对象时间常数的确定性反馈链路,从而保障动态响应精度与稳定性。在智能制造落地中,AI正从离线分析工具演进为嵌入式实时决策单元,其核心价值在于将工艺知识模型化、控制指令轻量化、执行路径边缘化。典型应用场景包括CNC加工过程中的振动自适应调参、刀具磨损在线补偿及多机协同优化。本实践聚焦FANUC 0i-MF平台,基于Modbus TCP硬实时通信与轻量LSTM+CNN融合模型,实现217毫秒级AI推理与PMC寄存器直

weixin_29704001的博客 323

#define(宏常量的使用)

一般是写在文件的上方 后面不要打; 格式是 #define 常量名 常量值 另外,常量还有一种定义方式,修饰的变量 const 数据类型 常量名=常量值 (主要是给自己看的)

sshydjy的博客 302

视觉定位避坑指南:基于双mark点的坐标转换常见错误排查

本文详细解析了工业视觉项目中基于双mark点的坐标转换常见错误及排查方法,涵盖旋转矩阵构建、坐标系原点选择、图像预处理优化等关键环节。通过实战案例和代码示例,帮助工程师避免定位偏差,提升系统精度,特别适用于自动化检测和精密制造场景。

7z8x2c4v6b9的博客 167

C++学习(二十七)define内存分析

#define的内存单元在程序运行前已经分配 宏定义只是在预处理器里进行文本替换 编译后放在常量数据区

hankern的专栏 786

GT-suite v2016的下载和安装

1 写在前面 GT-suite 是一款用来做内燃机仿真的软件。在安装过程中遇到很多问题,网上的安装教程也大都抄来抄去,试着安装了几遍都没有成功。最终在贴吧一个老哥的帖子里找到了解决办法,但是老哥的帖子也不是很详细,所以做了这个详细版本的教程。 GT-suite v2016安装包: 链接:https://pan.baidu.com/s/1JZPgJ8_-J-L8rV84-eHedQ 提取码:uj...

kisssshot的博客 3万+

A Side Scan Sonar Image Denoising Algorithm Based on Compound of Fuzzy Weighted Average and Kalman F

Abstract 水下侧扫声纳图像的噪声来源:高斯噪声、脉冲、斑点噪声。 传统方法只能移除部分噪声,并且去噪后容易造成细节模糊。 本文在考虑到噪声的随机性以后,提出一种融合了模糊加权平均和卡尔曼滤波的去噪方法。 在最大化保留图像细节的基础上,同时去除高斯噪声和脉冲噪声 一.Introduction 由于海底环境和声波自身干涉的影响,声纳图像生成的图像难免会有噪点。声纳采集的图像通常会有高斯噪声、脉...

qq_44516871的博客 927

const和define的区别

(1) 编译器处理方式不同   define宏是在预处理阶段展开。   const常量是编译运行阶段使用。 (2) 类型和安全检查不同   define宏没有类型,不做任何类型检查,仅仅是展开。   const常量有具体的类型,在编译阶段会执行类型检查。 (3) 存储方式不同   define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存。

Hokeo的专栏 682

波分复用-Zblock仿真

Z-BLOCK是一种用于光通信模块的光学元件,其核心结构是在玻璃块一侧贴有4个特定波长滤光片,另一侧镀有反射膜和增透膜。光信号在内部呈现Z字形反射路径,实现波长分离。文章以可见光LED为例,在ZEMAX中演示了非序列模式下的建模过程,重点介绍了滤光片和膜层的参数设置方法。需要注意的是,入射角度需根据玻璃折射率、通道高度和厚度精确计算,否则可能导致光泄漏。该建模方法同样适用于光通信中的光纤激光器系统。

Zhaxibamao的博客 1748

【C++ -模块一 常量变量、关键字、数据类型】

C++模块一内容

weixin_73833411的博客 782

C语言实现贪吃蛇小游戏!(超简单详细)详细思路+源码分享

我们的今天的目标就是:用C语言来实现一个贪吃蛇项目,也不用太复杂,初学者能看懂就行!

致力于C语言C++知识分享! 1万+

老款 NUC 复活计划:装 Ubuntu 部署 OpenClaw 本地 AI

老款 NUC 变身本地 AI 服务器指南 本文详细介绍了如何将老旧华硕 NUC 设备改造为本地 AI 服务器。主要内容包括: 硬件评估:列出老款 NUC 的最低配置要求(i3 6代/8GB内存/256GB SSD),并提供兼容性检查命令和性能预期表 系统准备:指导备份数据、下载 Ubuntu 22.04 LTS 和制作启动盘的方法(Windows/Linux双平台) 安装流程:从 BIOS 设置到 Ubuntu 安装的完整步骤,包括推荐的分区方案 系统优化:禁用不必要的服务、内核参数调优、Swap 配置和

博客 7608

define和const

C++中不但可以用define定义常量还可以用const定义常量,它们的区别如下: 用#define MAX 255定义的常量是没有类型的,所给出的是一个立即数,编译器只是把所定义的常量值与所定义的常量的名字联系起来,define所定义的宏变量在预处理的时候进行替换,在程序中使用到该常量的地方都要进行拷贝替换; 用const float MAX = 255; 定义的常量有类型名字,存放在内存的静态区域中,在程序运行过程中const变量只有一个拷贝,而#define 所定义的宏变量却有多个拷贝,所以宏定义在程

guobinperfect的博客 414

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

初识C语言——常见关键字、#define定义常量和宏

define是一个预处理指令,并不是关键字。——与include相同。//define定义常量//在变量与常量部分已经涉及到,有详细代码//define定义宏//代码2int main()//5*(7+5)return 0;} /*输出结果为:sum = 12num = 60*///代码2int main()//5*7+5return 0;} /*输出结果为:sum = 12num = 40*/

2301_79914002的博客 1947

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

初识C语言 4 —关键字、#define定义常量和宏(入门基础篇)

打好基础,从我做起

weixin_68839469的博客 2178

Camera2Demo

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

C语言第九天自学!----关键字( typedef+static)+ #define 定义常量和宏

自学第九天!

tt2377的博客 973

鹏哥C语言18-21---关键字+#define 定义常量和宏

/--------------------------------------------------------------------------------------------------------------11.2 关键字 static。//-------------------------------------------------------------------------------------------------------------11.关键字。

most_wanted_的博客 1171

c语言常见关键字汇总

关键字是c语言内置的,可以直接用。 #auto(automatic-自动的) 用于定义自动变量 #break

qq_47882731的博客 7646

C语言里面那些你必须知道的常用关键字(详细讲解)

学习C语言你必须掌握的关键字!还不快点进来看看。C/C++中的3大基本存储位置带你从底层了解关于关键字static修饰的变量和全局变量、以及#define定义标识符常量和宏、和类型重命名关键字typedef!

鸽芷咕的博客 2921

typedef、static、#define定义常量和宏的认识

见标题

Farewell_me的博客 697

C语言——初识关键字、static、#define定义、指针

C语言——初识关键字、static、#define定义、指针

VHhhbb的博客 750

C语言的typedef、static以及#define

摘要:本文介绍了C语言中三个关键概念:typedef用于简化类型命名;static修饰变量可改变其存储位置和生命周期,对全局变量和函数则限制跨文件调用;#define用于定义常量和宏,但需注意与局部变量同名时的冲突问题。这些特性分别涉及类型重定义、变量作用域控制以及预处理指令的应用。

2501_93107131的博客 536

从0开始学c语言-08-认识一下关键字、#define定义常量和宏

关键字是c语言提供的,不能够自己创建,变量的名字不能和关键字一样。

qq_61558455的博客 520

[C语言]常见关键字、typedef、static与#define定义的宏等

常见关键字、typedef、static与#define定义的宏等

weixin_54892866的博客 546

初识C语言 - 常见关键字(typedef,static,#define)

关键字 auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch type...

didi1663478999的博客 448

C语言之初学者也能玩的明白的关键字,define,指针与结构体

本篇文章详细介绍了关于初学者应该知道的关于常见关键字,define有什么作用,应该如何使用?关于C语言中的一大难点,指针应该如何入手?还有关于复杂对象该如何定义?相信大家看了凡人本篇文章有了个大概轮廓,以后详细介绍会放到以后讲解,先让大家了解了解,如果觉得凡人写的还不错,希望三连,感谢大家观看!!!

你我皆为凡人的博客 903
上一篇: 【C 语言极简自学笔记】C 语言操作符全面解析:从基础到进阶
下一篇: 【C语言极简自学笔记】彻底搞懂指针与结构体(struct):从入门到实战
LQYYDSY
博客等级 码龄4年 149粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值