type
status
date
slug
summary
tags
category
icon
password
1、宏
1.1 系统中的宏
FILE当前所处文件
LINE当前所处行号
DATE当前所处日期
TIME当前所处时间
TIMESTAMP时间戳
1.2 宏陷阱
宏只是进行替换,替换是在预编译时进行
注意:宏不会考虑运算符优先级的问题,因此我们要给每个参数以及每个表达式都加上括号。
1.3 宏和const常量的对比
宏(
#define
)和const
常量都可以用来定义不可修改的值,但它们在实现机制、编译器处理方式和使用场景上有显著区别。以下是详细的对比:特性 | 宏(#define) | const常量 |
处理阶段 | 预处理阶段(文本替换) | 编译阶段(语言层面的常量) |
类型检查 | 无类型,直接替换 | 有类型,编译器会检查类型匹配 |
内存分配 | 不分配内存(仅是替换) | 可能会分配内存(视优化情况而定) |
作用域 | 无作用域,全局替换 | 遵循变量作用域(块、函数、全局) |
调试支持 | 不可见(替换后消失) | 可见(可调试) |
是否可修改 | 不能修改(替换后是字面量) | 不能修改(编译时报错) |
1.4 #和##
#
运算符用于将宏参数转换为字符串常量。
##
运算符用于将两个标记连接成一个新的标记。
1.5 assert
断言的用法案例
打印
手搓一个assert
1.6可变参数
引入举例:
2、存储
2.1 存储空间

2.2 存储类型
auto:
1、只能修饰局部变量,一般省略存储类型会默认为auto。
2、修饰的变量存放在栈区
3、初值随机(如果变量不赋初值)
staic:
1、可以修饰变量或函数
2、变量的存放位置在全局区(静态区),如果静态变量有初值(非零),存放.data区;没有初值存放在.bss区域。
3、限制作用域:
- 修饰局部变量,和普通局部变量作用域没有区别,但是生命周期被延长为整个程序。也就是在作用函数外有生命但是不能被操作,变成了植物人。
- 修饰全局变量,限制在本文件中使用。
static的特点:
- static的本质是延长变量或函数的生命周期,同时限制其作用域。
- static声明的全局变量、函数,仅当前文件内可用,其他文件不能引用。
- static在函数内部声明的内部静态变量,只需初始化一次。
- 而且变量存储在全局数据段(静态存储区)中,而不是栈中,其生命周期持续到程序退出。
4、static修饰函数,限制在本文件中使用。
5、值初始化一次(即:该条语句只执行一次),初值赋值为0。
extern:
1、extern可以引用其他文件中的全局变量或函数
2、只能修饰全局变量
register:
1、修饰的变量放到寄存器中,如果寄存器满了,被修饰的变量就会默认回到auto类型
3、类型转换
3.1 强制类型转换
(需要转成的类型)要转换的变量
3.2 隐式类型转换

横向箭头:不管有没有进行混合运算,都会进行转换
纵向箭头:只有进行了混合运算,才会进行转换
注意:char、short会被当作int使用
注意:float会被当做double使用
案例:

4、union
联合体中的所有成员共享同一块内存,联合体的大小等于最大成员的大小。
场景案例
- Author:Blinky
- URL:http://preview.tangly1024.com/article/cprogramming
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!