0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C语言const关键字详解

CHANBAEK 来源:吾爱单片机 作者:echigh 2023-04-15 15:47 次阅读

const我平时没咋用过,最近在一份代码中配置外设寄存器值的数组定义上看到用了这个,因此进行一下简单的入门学习。 在本文最后1点给出const在配置外设初始默认寄存器的用法

  1. const定义的是变量,不是常量。 只是其值在初始化后就不允许再改变,即const变量为只读变量
  2. 注意以下为以讹传讹的错误结论:定义数组时其长度必须是常量,因此不允许使用const变量。

事实是不同的运行环境结论是不一样的:

(1)我试验在arm的cortex m0好的很,在cortex m0平台上(stm32g031单片机)用const变量来定义数组长度一点问题都没有

(2)而在windows平台上面试验,const变量的确不能用来定义数组长度,编译阶段就会报错

另外,虽然结论是错误的,但因为在有的平台上的确这个结论是成立的,因此为了代码统一规范,最好就遵循不要用const变量来定义数组长度的规则

3.定义const变量时,const和具体数据类型位置可以互换,没有区别,但一般是把const放前面:

(1)一般的定义方法

const  int  a = 10;

(2)const和int位置互换,和上面的定义含义是一样的

int  const  a = 10;

4.const 和 define 的区别

(1)const定义的是变量,define定义的是常量

(2)#define在预编译阶段就展开了,不占用内存,机器只会给变量分配内存,而const定义的是变量,是占用内存的

5.定义一个const数组的方法,用来给外设做初始默认寄存器配置,该数据里面元素的数据类型是结构体

#define SOMEDEVICE_REG_CONFIG_NUM_REGS 16


typedef struct
{
  unsigned char address;    /* 8-bit register address */
  unsigned char value;    /* 8-bit register data */
} somedevice_register_t;


somedevice_register_t const somedevice_registers[SOMEDEVICE_REG_CONFIG_NUM_REGS] =
{
  { 0x00, 0x11 },    
  { 0x01, 0x36 },
  { 0x02, 0x75 },
  { 0x03, 0x27 },
  { 0x04, 0x38 },
  { 0x05, 0x1F },    
  { 0x06, 0x25 },
  { 0x07, 0x88 },
  { 0x08, 0x46 },
  { 0x09, 0x29 },
  { 0x0a, 0x03 },
  { 0x0b, 0x01 },
  { 0x0c, 0x40 },
  { 0x0d, 0x11 },     
  { 0x0e, 0x31 },
  { 0x0f, 0x45 },
};
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    31

    文章

    5317

    浏览量

    120008
  • C语言
    +关注

    关注

    180

    文章

    7598

    浏览量

    136199
  • 变量
    +关注

    关注

    0

    文章

    613

    浏览量

    28329
  • 数组
    +关注

    关注

    1

    文章

    415

    浏览量

    25910
  • CONST
    +关注

    关注

    0

    文章

    44

    浏览量

    8149
收藏 人收藏

    评论

    相关推荐

    C语言关键字const的几种用法

    本期来讲解一个C语言关键字——const
    发表于 06-21 11:05 1569次阅读
    <b class='flag-5'>C</b><b class='flag-5'>语言</b><b class='flag-5'>关键字</b><b class='flag-5'>const</b>的几种用法

    C语言volatile关键字详解 精选资料分享

    1.volatile和什么有关百度翻译是这样子翻译volatile的:图1-1 百度翻译volatile截图volatile属于C语言关键字,《C Primer Puls》 是这样解
    发表于 07-22 07:20

    嵌入式程序员常见的const、static、volatile关键字

    嵌入式程序员const、static、volatile三个关键字的朴素认识摘要:在C语言程序编写中,const、static
    发表于 12-21 06:08

    标准C语言总共有32个关键字

    标准C语言总共有32个关键字
    发表于 01-12 15:59 0次下载

    C语言32个关键字

    C语言32个关键字,感兴趣的小伙伴们可以看看。
    发表于 07-26 16:29 66次下载

    C++与Cconst关键字有何差别?

    C++与C中的const关键字有何差别?
    的头像 发表于 02-03 14:51 1785次阅读

    C++中mutable关键字详解与实战

    mutable关键字详解与实战 在C++中mutable关键字是为了突破const关键字的限制,
    的头像 发表于 09-10 09:23 5526次阅读

    C++中的const关键字介绍

    前一篇文章我们主要介绍了C++中的复合类型引用和指针,这篇文章我们将会主要介绍C++中const关键字。有时候我们想定义一个值不能被改变的变量,例如我们想使用一个变量存储buffer的
    的头像 发表于 03-17 14:01 631次阅读

    浅谈C++的mutable关键字

    C++11中推出了一种特殊的关键字:mutable用于修饰类变量。它的作用是标注该变量一定会被修改,因此也就不是const类型。目的是为了使这些成员变量在被const
    的头像 发表于 04-15 11:13 3757次阅读

    const关键字应用总结

    C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性
    的头像 发表于 05-26 09:06 547次阅读

    C语言32个关键字可以分为这几类

    C语言是一种面向过程、抽象化的通用程序设计语言,广泛应用于嵌入式底层和系统开发。C语言关键字共有
    的头像 发表于 12-31 15:28 4951次阅读
    <b class='flag-5'>C</b><b class='flag-5'>语言</b>32个<b class='flag-5'>关键字</b>可以分为这几类

    浅析C语言中的regiseter关键字

    C语言中重要的关键字有很多,static const extern我们之前都讲过,还有一个在面试中出现的频率也比较高:register。
    的头像 发表于 08-25 17:10 1090次阅读
    浅析<b class='flag-5'>C</b><b class='flag-5'>语言</b>中的regiseter<b class='flag-5'>关键字</b>

    快速掌握C语言关键字

    C语言中的32个关键字你知道多少个呢?根据关键字的作用分为四类:数据类型关键字、控制语句关键字
    的头像 发表于 07-06 08:04 304次阅读
    快速掌握<b class='flag-5'>C</b><b class='flag-5'>语言</b><b class='flag-5'>关键字</b>

    C语言关键字--typedef

    C语言关键字使用方法学习指南!
    的头像 发表于 10-07 12:44 174次阅读

    C语言关键字分别发生在哪个阶段

    在编译的第一个阶段:预处理,对一些宏定义做替换。 第二个,constC语言中的 const 用于修饰只读变量,表示变量本身不能修改。 这个关键字
    的头像 发表于 11-24 10:31 72次阅读