c語言之assert的使用,c語言assert

來源:互聯網
上載者:User

c語言之assert的使用,c語言assert
assert

作用

程式中關鍵的地方可以通過assert這個宏來斷言。如果斷言非真,程式停止,標準錯誤輸出一條具體的錯誤資訊。
但在實戰中,程式直接停止是很不好的現象,因此斷言只在偵錯工具使用。













NDEBUG宏

為了在調試中方便使用assert,而在不需要時容易停掉assert的工作,於是有了NDEBUG宏來規定assert的行為。如果定義了這個宏,assert不會起作用。

#ifdef NDEBUG
#define assert(x) ((void)0)
#else
...








標頭檔的特性
assert.h標頭檔和別的標頭檔不同,不具有等冪性。
等冪性就是包含該檔案一次到多次,效果相同。


但assert.h檔案包含多次,卻不一定相同。

一開始就取消了原有的 assert宏的定義

因此開啟斷言要寫成  #undef NDEBUG#include<assert.h>
關閉斷言要寫成#define NDEBUG#include<assert.h>



測試

#include <stdio.h>#include <stdlib.h>#define NDEBUG#include <assert.h>void t1(void){    int i = 0;        assert(i == 0);    assert(i == 1);}#undef NDEBUG#include <assert.h>void t2(void){    int j = 0;        assert(j == 0);    assert(j == 1);}#define NDEBUG#include <assert.h>int main(void){    int i = 1;    assert(i == 0);    t1();    printf("hello world\n");    t2();}


t1函數開始時,取消了斷言,因此執行t1不會停止。t2函數開始時,實行了斷言,因此最後t2會停止在 j==1句時。main函數雖然斷言為假,但開始時取消了斷言,因此不會停止。



輸出結果為:












C語言 assert幹什用的

調用assert.h 裡面的assert宏

用途錯誤偵測
assert( maxval(5, ten, sqr) == 50); 《《 maxval(5, ten, sqr) 傳回值不等於50
輸出錯誤並退出程式。。。。。。。。。。。。。。。。。。

#include <assert.h> void assert( int exp );
功能:宏assert()用於錯誤偵測。如果運算式的結果為零,宏寫錯誤資訊到STDERR並退出程式執行。如果宏NDEBUG已經定義,宏assert()將被忽略。
 
ASSERT在C語言中有什作用?

是程式調試很重要的手段,
ASSERT( f )
在Debug模式下,每次運行到這裡後會計算括弧中的運算式,如果運算式為0,則中斷執行,彈出一個警告框,使用者可選擇“繼續”,“重試”,“忽略”
在Release模式下,這句語句不會被編譯進代碼。

ASSERT一般用於程式內部確認參數的正確性,即調用內建函式的時候,要由調用者保證參數的正確,而被調用函數內部,就可以通過ASSERT來檢查參數是否滿足要求。
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.