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

    文章

    1576

    浏览量

    48606
  • volatile
    +关注

    关注

    0

    文章

    44

    浏览量

    12953
  • sizeof
    +关注

    关注

    0

    文章

    9

    浏览量

    6420
  • ASSERT
    +关注

    关注

    0

    文章

    17

    浏览量

    7134

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

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

收藏 人收藏

    评论

    相关推荐

    C/C++代码动态测试工具VectorCAST插桩功能演示#代码动态测试 #C++

    C++代码
    北汇信息POLELINK
    发布于 :2024年04月18日 11:57:45

    如何在if和assert中做选择

    ,而赋值给 g_state 之后,必须保证赋值结果的正确性,因此使用 assert 断言。 五、总结这篇文章分析了 C 语言中比较晦涩、模糊的一个概念,似乎有点虚无缥缈,但是的确又需要我们停下来仔细
    发表于 04-08 06:13

    vb语言和c++语言的区别

    )是由Microsoft开发的一种面向对象的事件驱动编程语言。它的设计目标是简化编程过程,让初学者也能快速上手。与之相比,C++语言是一种通用的、面向对象的编程语言,其设计目标是提供高性能的系统级编程。 语法: VB语言的语法
    的头像 发表于 02-01 10:20 580次阅读

    C语言assert(断言)简介

    assert的功能,条件为真,程序继续执行;如果断言为假(false),则程序终止。
    的头像 发表于 11-17 16:33 635次阅读
    C语言<b class='flag-5'>assert</b>(断言)简介

    volatile的原理

    今天来了解一下面试题:你对 volatile 了解多少。要了解 volatile 关键字,就得从 Java 内存模型开始。最后到 volatile 的原理。 一、Java 内存模型 (JMM) 大家
    的头像 发表于 10-10 16:33 200次阅读
    <b class='flag-5'>volatile</b>的原理

    书本里不会讲到的volatile - 第15节

    volatile
    充八万
    发布于 :2023年09月01日 19:43:46

    书本里不会讲到的volatile - 第14节

    volatile
    充八万
    发布于 :2023年09月01日 19:42:56

    书本里不会讲到的volatile - 第4节

    volatile
    充八万
    发布于 :2023年09月01日 19:34:33

    C++中常用关键字详解(2)

    C++中,volatile是一个关键字,用于修饰变量,告诉编译器该变量的值可能在程序流程之外被意外修改,因此编译器不应该对该变量进行优化(如缓存变量值或重排指令顺序)。
    发表于 08-08 16:15 189次阅读

    【开源三方库】Aki:一行代码极简体验JS&amp;C++跨语言交互

    提供解决方案,提供了复杂度仅为O(1)级别的极简语法糖使用方式,一行代码完成JS与C/C++的无障碍跨语言互调, 所键即所得 。同时开发者无需关心NAPI的线程安全问题、Native对象GC问题,为
    发表于 08-07 17:04

    如何为Arm编译Cc++代码

    编写CC++应用程序时,需要使用编译器工具链将其编译为机器代码。然后,您可以在基于Arm的处理器上运行此编译的可执行代码,或者使用模型对其进行模拟。 裸机编译编译器工具链包括以下组件: •将C
    发表于 08-02 17:28

    C语言中assert的使用

    assert意思是断言,常用在程序的DEBUG版本中。
    发表于 07-21 14:51 512次阅读

    C语言sizeof和strlen的区别

    大家好,我是嵌入式老林,从事嵌入式软件开发多年,今天分享的内容是C语言sizeof和strlen的区别,希望能对你有所帮助
    发表于 07-11 11:51 353次阅读

    一起探索C++的世界!

    C++
    YS YYDS
    发布于 :2023年07月07日 19:10:25

    volatile的实现原理分析

    `volatile`是一个轻量级的`synchronized`,一般作用于 **变量** ,在多处理器开发的过程中保证了内存的可见性。相比于`synchronized`关键字,`volatile`关键字的执行成本更低,效率更高
    的头像 发表于 05-11 17:33 463次阅读
    <b class='flag-5'>volatile</b>的实现原理分析