最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c語言中assert斷言用法實例詳解

 更新時間:2024年02月07日 08:28:46   作者:權(quán)^  
斷言是C語言中一種用于檢查程序中假設(shè)語句正確性的方法,通過使用斷言,開發(fā)人員可以在程序中插入一些條件,以確保程序的執(zhí)行滿足特定的預期,這篇文章主要給大家介紹了關(guān)于c語言中assert斷言用法的相關(guān)資料,需要的朋友可以參考下

一、斷言的概念

assert.h 頭?件定義了宏 assert() ,用于在運行時確保程序符合指定條件,如果不符合,就報錯終止運行。這個宏常常被稱為“斷言”。

二、assert斷言

assert(p != NULL);

上面代碼在程序運行到這一行語句時,驗證變量 p 是否等于 NULL 。如果確實不等于 NULL ,程序繼續(xù)運行,否則就會終止運行,并且給出報錯信息提升。assert() 宏接受?個表達式作為參數(shù)。如果該表達式為真(返回值非零),assert() 不會產(chǎn)?任何作用,程序繼續(xù)運行。如果該表達式為假(返回值為零), assert() 就會報錯,在標準錯誤流 stderr 中寫??條錯誤信息,顯示沒有通過的表達式,以及包含這個表達式的文件名和行號。

2.1 代碼1

#include<stdio.h>
int main()
{
	int* p = NULL;
	assert(p != NULL);
	return 0;
}

2.1.1運行結(jié)果

這里顯示assert未定義,需要包含頭文件

#include<assert.h>

完整代碼:

#include<stdio.h>
#include<assert.h>
int main()
{
	int* p = NULL;
	assert(p != NULL);
	return 0;
}

再次運行,運行結(jié)果:

2.1.2分析

報錯會告訴你在哪一行。

2.2代碼2

#include<stdio.h>
#include<assert.h>
int main()
{
	int a = 10;
	int* p = &a;
	assert(p != NULL);
	printf("%d", *p);
	return 0;
}

2.2.1運行結(jié)果

2.2.2分析

assert不等于 NULL ,程序繼續(xù)運行,結(jié)果沒有報錯。

2.3代碼3

#include<stdio.h>
#include<assert.h>
int main()
{
	int a = 0;
	scanf("%d", &a);
	assert(a>10);
	printf("%d", a);
	return 0;
}

2.3.1運行結(jié)果及其分析

三、優(yōu)點

assert() 的使用對程序員是非常友好的,使用 assert() 有幾個好處:它不僅能?動標識文件和出問題的行號,還有?種?需更改代碼就能開啟或關(guān)閉 assert() 的機制。如果已經(jīng)確認程序沒有問題,不需要再做斷言,就在 #include <assert.h> 語句的前面,定義?個宏 NDEBUG 。

#define NDEBUG
#include <assert.h>

然后,重新編譯程序,編譯器就會禁用文件中所有的 assert() 語句。如果程序?出現(xiàn)問題,可以移除這條 #define NDBUG 指令(或者把它注釋掉),再次編譯,這樣就重新啟用了 assert() 語句。

代碼:

#include<stdio.h>
#define NDEBUG
#include<assert.h>
int main()
{
	int a = 0;
	scanf("%d", &a);
	assert(a>10);
	printf("%d", a);
	return 0;
}

運行結(jié)果及其分析:

四、缺點

因為引?了額外的檢查,增加了程序的運行的時間。

五、注意

一般我們可以在 Debug 中使用,在 Release 版本中選擇禁用 assert 就行,在 VS 這樣的集成開發(fā)環(huán)境中,在 Release 版本中,直接就是優(yōu)化掉了。這樣在debug版本寫有利于程序員排查問題,在 Release 版本不影響用戶使用時程序的效率。

附:用法總結(jié)與注意事項

1)在函數(shù)開始處檢驗傳入?yún)?shù)的合法性,如:

int resetBufferSize(int nNewSize){undefined
//功能:改變緩沖區(qū)大小,
//參數(shù):nNewSize 緩沖區(qū)新長度
//返回值:緩沖區(qū)當前長度
//說明:保持原信息內(nèi)容不變 nNewSize<=0表示清除緩沖區(qū)
assert(nNewSize >= 0);
assert(nNewSize <= MAX_BUFFER_SIZE);

…
}

2)每個assert只檢驗一個條件,因為同時檢驗多個條件時,如果斷言失敗,無法直觀的判斷是哪個條件失敗

不好: assert(nOffset>=0 && nOffset+nSize<=m_nInfomationSize);

好:

assert(nOffset >= 0);
assert(nOffset+nSize <= m_nInfomationSize);

3)不能使用改變環(huán)境的語句,因為assert只在DEBUG中生效,如果這么做,會使用程序在真正運行時遇到問題

錯誤: assert(i++ < 100)

這是因為如果出錯,比如在執(zhí)行之前i=100,那么這條語句就不會執(zhí)行,那么i++這條命令就沒有執(zhí)行。

正確:

assert(i < 100)
i++;

4)assert和后面的語句應空一行,以形成邏輯和視覺上的一致感

總結(jié)

到此這篇關(guān)于c語言中assert斷言用法的文章就介紹到這了,更多相關(guān)c語言assert斷言詳解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于C++詳解數(shù)據(jù)結(jié)構(gòu)(附帶例題)

    基于C++詳解數(shù)據(jù)結(jié)構(gòu)(附帶例題)

    數(shù)據(jù)結(jié)構(gòu)作為每一個IT人不可回避的問題,本文基于C++編寫,下面這篇文章主要給大家介紹了關(guān)于數(shù)據(jù)結(jié)構(gòu)的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-06-06
  • 常用的C語言編程工具匯總

    常用的C語言編程工具匯總

    c語言編程軟件適于編寫系統(tǒng)軟件,是學習編程的同學們的必備軟件。c語言一種非常強大的計算機語言,應用非常廣泛,不僅僅是在軟件開發(fā)上,而且各類科研都會用到c語言。今天小編給大家匯總下C語言的編程工具
    2018-01-01
  • 詳解C++中的內(nèi)聯(lián)函數(shù)和函數(shù)重載

    詳解C++中的內(nèi)聯(lián)函數(shù)和函數(shù)重載

    這篇文章主要介紹了詳解C++中的內(nèi)聯(lián)函數(shù)和函數(shù)重載,是C++入門學習中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-09-09
  • C++中類的默認成員函數(shù)詳解

    C++中類的默認成員函數(shù)詳解

    大家好,本篇文章主要講的是C++中類的默認成員函數(shù)詳解,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • C++編程中new運算符的使用學習教程

    C++編程中new運算符的使用學習教程

    這篇文章主要介紹了C++編程中new運算符的使用學習教程,是C++入門學習中的基礎(chǔ)知識,需要的朋友可以參考下
    2016-01-01
  • 插入排序算法之希爾排序+直接插入排序

    插入排序算法之希爾排序+直接插入排序

    這篇文章主要介紹了插入排序算法之希爾排序+直接插入排序的相關(guān)知識,本文通過實例圖文相結(jié)合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-11-11
  • C語言字符串函數(shù),字符函數(shù),內(nèi)存函數(shù)使用及模擬實現(xiàn)

    C語言字符串函數(shù),字符函數(shù),內(nèi)存函數(shù)使用及模擬實現(xiàn)

    這篇文章主要介紹了C語言字符串函數(shù),字符函數(shù),內(nèi)存函數(shù)使用及模擬實現(xiàn),文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • 詳解C/C++性能優(yōu)化背后的方法論TMAM

    詳解C/C++性能優(yōu)化背后的方法論TMAM

    開發(fā)過程中我們多少都會關(guān)注服務(wù)的性能,然而性能優(yōu)化是相對比較困難,往往需要多輪優(yōu)化、測試,屬于費時費力,有時候還未必有好的效果。但是如果有較好的性能優(yōu)化方法指導、工具輔助分析可以幫助我們快速發(fā)現(xiàn)性能瓶頸所在,針對性地進行優(yōu)化,可以事半功倍
    2021-06-06
  • C++實現(xiàn)一鍵關(guān)閉桌面的示例代碼

    C++實現(xiàn)一鍵關(guān)閉桌面的示例代碼

    這篇文章主要為大家詳細介紹了如何利用C++實現(xiàn)一鍵關(guān)閉桌面的功能,文中的示例代碼講解詳細,具有一定的學習價值,感興趣的小伙伴可以了解一下
    2023-07-07
  • C++強制類型轉(zhuǎn)換(static_cast、dynamic_cast、const_cast、reinterpret_cast)

    C++強制類型轉(zhuǎn)換(static_cast、dynamic_cast、const_cast、reinterpret_ca

    本文主要介紹了C++強制類型轉(zhuǎn)換,主要介紹了static_cast、dynamic_cast、const_cast、reinterpret_cast的4種方法,感興趣的可以了解一下
    2021-08-08

最新評論

莆田市| 清水河县| 香港 | 山东| 前郭尔| 澳门| 平武县| 潜江市| 阿坝县| 灵丘县| 阿坝县| 兴宁市| 时尚| 石台县| 福建省| 安多县| 江山市| 南京市| 辽中县| 武平县| 鄂尔多斯市| 榆中县| 宣恩县| 平遥县| 奇台县| 玉林市| 玛纳斯县| 昌黎县| 赞皇县| 邮箱| 博白县| 连江县| 巢湖市| 长顺县| 长治县| 罗定市| 泰安市| 文山县| 云林县| 江安县| 志丹县|