volatile
volatile int i = 10;
volatile 關(guān)鍵字是一種類(lèi)型修飾符,用它聲明的類(lèi)型變量表示可以被某些編譯器未知的因素(操作系統(tǒng)、硬件、其它線程等)更改。所以使用 volatile 告訴編譯器不應(yīng)對(duì)這樣的對(duì)象進(jìn)行優(yōu)化。
volatile 關(guān)鍵字聲明的變量,每次訪問(wèn)時(shí)都必須從內(nèi)存中取出值(沒(méi)有被 volatile 修飾的變量,可能由于編譯器的優(yōu)化,從 CPU 寄存器中取值)
const 可以是 volatile (如只讀的狀態(tài)寄存器)
指針可以是 volatile
assert()
斷言,是宏,而非函數(shù)。assert 宏的原型定義在 《assert.h》(C)、《cassert》(C++)中,其作用是如果它的條件返回錯(cuò)誤,則終止程序執(zhí)行。可以通過(guò)定義 NDEBUG 來(lái)關(guān)閉 assert,但是需要在源代碼的開(kāi)頭,include 《assert.h》 之前。
assert() 使用
#define NDEBUG // 加上這行,則 assert 不可用#include 《assert.h》
assert( p != NULL ); // assert 不可用
sizeof()
sizeof 對(duì)數(shù)組,得到整個(gè)數(shù)組所占空間大小。
sizeof 對(duì)指針,得到指針本身所占空間大小。
#pragma pack(n)
設(shè)定結(jié)構(gòu)體、聯(lián)合以及類(lèi)成員變量以 n 字節(jié)方式對(duì)齊
#pragma pack(n) 使用
#pragma pack(push) // 保存對(duì)齊狀態(tài)#pragma pack(4) // 設(shè)定為 4 字節(jié)對(duì)齊
struct test{ char m1; double m4; int m3;};
#pragma pack(pop) // 恢復(fù)對(duì)齊狀態(tài)
編輯:jq
-
編譯器
+關(guān)注
關(guān)注
1文章
1665瀏覽量
50956 -
volatile
+關(guān)注
關(guān)注
0文章
46瀏覽量
13556 -
sizeof
+關(guān)注
關(guān)注
0文章
9瀏覽量
6586 -
ASSERT
+關(guān)注
關(guān)注
0文章
17瀏覽量
7608
原文標(biāo)題:C++基礎(chǔ)語(yǔ)法梳理:volatile、assert()和sizeof()
文章出處:【微信號(hào):cyuyanxuexi,微信公眾號(hào):C語(yǔ)言編程學(xué)習(xí)基地】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
強(qiáng)實(shí)時(shí)運(yùn)動(dòng)控制內(nèi)核MotionRT750(六):us級(jí)高速交互之C++,為智能裝備提速
主流的 MCU 開(kāi)發(fā)語(yǔ)言為什么是 C 而不是 C++?
單片機(jī)編程關(guān)鍵字之volatile
基于OpenHarmony標(biāo)準(zhǔn)系統(tǒng)的C++公共基礎(chǔ)類(lèi)庫(kù)案例:ThreadPoll
Spire.XLS for C++組件說(shuō)明
EE-112:模擬C++中的類(lèi)實(shí)現(xiàn)
AKI跨語(yǔ)言調(diào)用庫(kù)神助攻C/C++代碼遷移至HarmonyOS NEXT
運(yùn)動(dòng)控制卡周期上報(bào)實(shí)時(shí)數(shù)據(jù)IO狀態(tài)之C++篇
同樣是函數(shù),在C和C++中有什么區(qū)別
C7000 C/C++優(yōu)化指南用戶(hù)手冊(cè)
MSP430優(yōu)化C/C++編譯器v21.6.0.LTS
TMS320C6000優(yōu)化C/C++編譯器v8.3.x
TMS320C28x優(yōu)化C/C++編譯器v22.6.0.LTS
C語(yǔ)言和C++中結(jié)構(gòu)體的區(qū)別
C7000優(yōu)化C/C++編譯器

C++基礎(chǔ)語(yǔ)法之volatile、assert()和sizeof()
評(píng)論