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

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

3天内不再提示

C++基础语法之volatile、assert()和sizeof()

C语言编程学习基地 来源:C语言编程学习基地 作者: C语言编程 2021-09-09 09:48 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

volatile

volatile int i = 10;

volatile 关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素(操作系统、硬件、其它线程等)更改。所以使用 volatile 告诉编译器不应对这样的对象进行优化。

volatile 关键字声明的变量,每次访问时都必须从内存中取出值(没有被 volatile 修饰的变量,可能由于编译器的优化,从 CPU 寄存器中取值)

const 可以是 volatile (如只读的状态寄存器)

指针可以是 volatile

assert()

断言,是宏,而非函数。assert 宏的原型定义在 《assert.h》(C)、《cassert》(C++)中,其作用是如果它的条件返回错误,则终止程序执行。可以通过定义 NDEBUG 来关闭 assert,但是需要在源代码的开头,include 《assert.h》 之前。

assert() 使用

#define NDEBUG // 加上这行,则 assert 不可用#include 《assert.h》

assert( p != NULL ); // assert 不可用

sizeof()

sizeof 对数组,得到整个数组所占空间大小。

sizeof 对指针,得到指针本身所占空间大小。

#pragma pack(n)

设定结构体、联合以及类成员变量以 n 字节方式对齐

#pragma pack(n) 使用

#pragma pack(push) // 保存对齐状态#pragma pack(4) // 设定为 4 字节对齐

struct test{ char m1; double m4; int m3;};

#pragma pack(pop) // 恢复对齐状态

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编译器
    +关注

    关注

    1

    文章

    1672

    浏览量

    51913
  • volatile
    +关注

    关注

    0

    文章

    46

    浏览量

    13796
  • sizeof
    +关注

    关注

    0

    文章

    9

    浏览量

    6624
  • ASSERT
    +关注

    关注

    0

    文章

    17

    浏览量

    7676

原文标题:C++基础语法梳理:volatile、assert()和sizeof()

文章出处:【微信号:cyuyanxuexi,微信公众号:C语言编程学习基地】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    C++与lua联合编程

    ,且发版风险极高。Lua 热更新机制是解决这一痛点的唯一出路。 然而,市面上能写 Lua 业务脚本的人如过江鲫,但真正能驾驭 C++ 与 Lua 底层交互(即精通栈机制)的人却凤毛麟角。当线上出现
    发表于 04-19 16:27

    C++:const 的空间,常量也能占内存?

    ] != BLACK)): return True return False c++语言5g.FsW.dgdfgsg.cnJIWWQc++语言 c++语言5g.I5y.dgdfgsg.cnJIWWQc++
    发表于 04-16 19:19

    keil实现cc++混合编程

    起因项目中使用到一个开源的模拟IIC的库,封装的比较好,但是是使用c++写的。于是将其移植到自己的项目中,主要有以下三步操作: 在工程选项中 C/C++中去掉勾选 C99 Mode
    发表于 01-26 08:58

    volatile的修饰符

    of structures, */ /* if the C compiler doesn\'t support this feature */ #ifdef NOSTRUCTASSIGN memcpy (d, s
    发表于 01-06 07:39

    C语言与C++的区别及联系

    C语言和C++到底是什么关系? 首先C++C语言本来就是两种不同的编程语言,但C++确实是对C
    发表于 12-24 07:23

    CC++之间的联系

    1、语法兼容性: C++完全兼容C语言的语法,这意味着任何有效的C语言程序都可以直接在C++
    发表于 12-11 06:51

    C语言和C++之间的区别是什么

    C++的标准库那样集成度高和功能齐全。 6、编译器与语言特性: C++编译器通常比C语言编译器更加复杂,因为它需要处理更多的语言特性,比如模板元编程、命名空间、引用等。 C++
    发表于 12-11 06:23

    C/C++条件编译

    条件编译是一种在编译时根据条件选择性地包含或排除部分代码的处理方法。在 C/C++ 中,条件编译使用预处理指令 #ifdef、#endif、#else 和 #elif 来实现。常用的条件编译指令有
    发表于 12-05 06:21

    C++程序异常的处理机制

    语法 C++异常处理涉及到3个关键字: throw---抛出一个异常,带参数 try---用于标识可能会出现异常的代码段 catch--是用于标识异常处理的代码段 下面以一个例子来说明它们
    发表于 12-02 07:12

    什么是‍‍volatile

    volatile是一个类型修饰符(type specifier)。 volatile的作用是作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值。 volatile变量是说这变量可能会被意想不到地改变,这样
    发表于 11-25 06:36

    C/C++代码静态测试工具Perforce QAC 2025.3的新特性

     Perforce Validate 中 QAC 项目的相对/根路径的支持。C++ 分析也得到了增强,增加了用于检测 C++ 并发问题的新检查,并改进了实体名称和实
    的头像 发表于 10-13 18:11 735次阅读
    <b class='flag-5'>C</b>/<b class='flag-5'>C++</b>代码静态测试工具Perforce QAC 2025.3的新特性

    强实时运动控制内核MotionRT750(六):us级高速交互C++,为智能装备提速

    Windows下运动控制实时内核MotionRT750的高速交互C++
    的头像 发表于 09-04 14:50 925次阅读
    强实时运动控制内核MotionRT750(六):us级高速交互<b class='flag-5'>之</b><b class='flag-5'>C++</b>,为智能装备提速

    技能+1!如何在树莓派上使用C++控制GPIO?

    在使用树莓派时,你会发现Python和Scratch是许多任务(包括GPIO编程)中最常用的编程语言。但你知道吗,你也可以使用C++进行GPIO编程,而且这样做还有不少好处。借助WiringPi
    的头像 发表于 08-06 15:33 4503次阅读
    技能+1!如何在树莓派上使用<b class='flag-5'>C++</b>控制GPIO?

    C++ 与 Python:树莓派上哪种语言更优?

    Python是树莓派上的首选编程语言,我们的大部分教程都使用它。然而,C++在物联网项目中同样广受欢迎且功能强大。那么,在树莓派项目中选择哪种语言更合适呢?Python因其简洁性、丰富的库和资源而被
    的头像 发表于 07-24 15:32 1109次阅读
    <b class='flag-5'>C++</b> 与 Python:树莓派上哪种语言更优?

    主流的 MCU 开发语言为什么是 C 而不是 C++

    在单片机的地界儿里,C语言稳坐中军帐,C++想分杯羹?难喽。咱电子工程师天天跟那针尖大的内存空间较劲,C++那些花里胡哨的玩意儿,在这儿真玩不转。先说内存这道坎儿。您当stm32f4的256kRAM
    的头像 发表于 05-21 10:33 1208次阅读
    主流的 MCU 开发语言为什么是 <b class='flag-5'>C</b> 而不是 <b class='flag-5'>C++</b>?