assert的進一步分析

2021-08-09 01:59:53 字數 1017 閱讀 8200

資料結構之assert():

本質:接受乙個int型別的引數返回乙個void型別的結果的函式。

用法:#include

void assert(exp());//若exp()為真,則程式正常繼續執行,為exp()為假,則它先向標準錯誤流stderr列印一條出錯資訊,然後通過呼叫系統函式來終止程式執行;(abort()函式來終止程式)。

使用斷言可以建立更穩定,品質更好且不易於出錯的**。當需要在乙個值為false時中斷操作的話,可以使用斷言。

除了型別檢查和單元測試外,斷言還提供了一種確定各種特性是否在程式中得到維護的極好的方法。

使用斷言使向按契約式設計更近了一步。

斷言只有在debug模式下才有效。

注意點:

斷言的***是因為它修改了程式中變數的值並且未丟擲錯誤,這樣的錯誤如果不細心的檢查是很難發現的。但是同時可以根據以上的***得到乙個有用的特性,根據它來測試斷言是否開啟。(bool  is enable=false; //...       assert is enable=true;)

assert是巨集,而不是函式。在c語言庫檔案#include中;

assert巨集的原型定義在中,其作用是如果它的條件返回錯誤,則終止程式執行,原型定義:

#include

void assert( int expression );

assert的作用是先計算表示式expression,如果其值為假(即為0),那麼它先向標準錯誤流(stderr)列印一條出錯資訊,然後通過呼叫abort來終止程式執行;否則,assert()無任何作用。巨集assert()一般用於確認程式的正常操作,其中表示式構造無錯時才為真值。完成除錯後,不必從源**中刪除assert()語句,因為巨集debug有定義時,巨集assert()的定義為空

缺點:多次使用會導致程式的效能,會增大開銷。assert()函式不能使用改變環境的語句

例:assert(!i++);//在判斷i++不為零時,應該把i++放在外面執行,因為assert只在debug模式下起作用,在其他版本可能被注釋,導致源**評測變得困難。

bufferedReader進一步理解

public static void main string args string mystring system.out.println 請輸入明文 bufferedreader buf new bufferedreader new inputstreamreader system.in try...

Looper Handler進一步學習

package com.test.looper import android.os.bundle import android.os.handler import android.os.handlerthread import android.os.looper import android.os....

進一步了解Makefile

mkdir p add src 一層一層建立目錄。touch add makefile 建立 makefile include 目錄中存放標頭檔案。scripts 存放指令碼檔案。存放方式 按照核心管理原始碼來管理。為什麼學習makefile?編譯大型專案 讀懂別人的開源 找到程式入口 看專案的順序...