wxvirus wxvirus
首页
  • Go文章

    • Go语言学习
  • Rust

    • Rust学习
  • Java

    • 《Java》
  • Python文章

    • Python
  • PHP文章

    • PHP设计模式
  • 学习笔记

    • 《Git》
  • HTML
  • CSS
  • JS
  • 技术文档
  • GitHub技巧
  • 刷题
  • 博客搭建
  • 算法学习
  • 架构设计
  • 设计模式
  • 学习
  • 面试
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

无解的lifecycle

let today = new Beginning()
首页
  • Go文章

    • Go语言学习
  • Rust

    • Rust学习
  • Java

    • 《Java》
  • Python文章

    • Python
  • PHP文章

    • PHP设计模式
  • 学习笔记

    • 《Git》
  • HTML
  • CSS
  • JS
  • 技术文档
  • GitHub技巧
  • 刷题
  • 博客搭建
  • 算法学习
  • 架构设计
  • 设计模式
  • 学习
  • 面试
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • C&C++

    • C编译和链接过程
    • 升级xcode导致cmake编译不通过
    • 常量
      • 常量
        • 真正的常量:字面量literal
    • 文件包含
    • 变量内存地址分析
    • C语言简单代码解析
    • makefile修炼
    • linux信号
    • linux多进程
  • PHP

  • Python

  • Go

  • microservice

  • rust

  • Java

  • 学习笔记

  • 后端
  • C&C++
wxvirus
2022-05-20

常量

# 常量

//
// Created by virus on 2022/5/20.
//

#include "stdio.h"

int main() {
    // 常量 或者 称呼为只读变量
    const int kRed = 0xFF0000;
    const int kGreen = 0x00FF00;
    const int kBlue = 0x0000FF;
    printf("kRed: %d\n", kRed);

    // 获取它的指针地址
    int *p_k_red = &kRed;
    // 强制的修改
    *p_k_red = 0;
    printf("kRed: %d\n", kRed);
    return 0;
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

虽然说上面最终的打印结果是一样的,是因为编译器对常量进行了优化处理,但是我们通过debug打断点的时候,其实值以及改了。

address

所以这里,常量其实可以称之为只读变量,其实真正的const是没法修改的。

下面说一个宏,是#define开头的,要比const常量一点。

//
// Created by virus on 2022/5/20.
//

#include "stdio.h"

// 宏
#define COLOR_RED 0xFF0000

int main() {

    printf("COLOR_RED: %d\n", COLOR_RED);

    return 0;
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

define

等到了编译预处理的时候,这些COLOR_RED会完全被下面的值所替代,以及我们写的所有注释也会被清理掉,其实我们最上面写的#include <stdio.h>也是一个宏处理,预处理的时候会把它的所有文件都拿过来。我们可以使用gcc -E demo1.c -o output.c可以得到预处理后的c 源文件

int main() {

    const int kRed = 0xFF0000;
    const int kGreen = 0x00FF00;
    const int kBlue = 0x0000FF;
    printf("kRed: %d\n", kRed);


    int *p_k_red = &kRed;

    *p_k_red = 0;
    printf("kRed: %d\n", kRed);

    printf("COLOR_RED: %d\n", 0xFF0000);

    return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

可以看到原先的 COLOR_RED以及被完全替换掉了,上面的stdio的我没赋值下来,因为太多了,就不放了,可以自己尝试去查看内容。

我们可以对宏进行取消

#undef COLOR_RED

// 之后就获取不到对应的值
1
2
3

# 真正的常量:字面量literal

3;
3u;
3l;
3.f;
3.9;
'c';
"cs";
L'中';
L"中国";
1
2
3
4
5
6
7
8
9

但是呢,我们尽量不要在代码里使用硬编码就是上面的字面量。可以推荐使用宏。

编辑 (opens new window)
上次更新: 2022/05/20, 23:36:00
升级xcode导致cmake编译不通过
文件包含

← 升级xcode导致cmake编译不通过 文件包含→

最近更新
01
vue3配合vite初始化项目的一些配置
07-26
02
网盘系统开发学习
07-24
03
linux多进程
06-19
更多文章>
Theme by Vdoing | Copyright © 2021-2024 wxvirus 苏ICP备2021007210号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式