1. 程式人生 > >C語言中assert函式的用法

C語言中assert函式的用法

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

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

  3)不能使用改變環境的語句,因為assert只在DEBUG個生效,如果這麼做,會使用程式在真正執行時遇到問題 
  錯誤: assert(i++ < 100) 
     這是因為如果出錯,比如在執行之前i=100,那麼這條語句就不會執行,那麼i++這條命令就沒有執行。 

  正確: assert(i < 100) 
      i++; 

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

  5)有的地方,assert不能代替條件過濾 

  程式一般分為Debug 版本和Release 版本,Debug 版本用於內部除錯,Release 版本發行給使用者使用。斷言assert 是僅在Debug 版本起作用的巨集,它用於檢查“不應該”發生的情況。以下是一個記憶體複製程式,在執行過程中,如果assert 的引數為假,那麼程式就會中止(一般地還會出現提示對話,說明在什麼地方引發了assert)。 

相關推薦

C言中assert函式用法

  2)每個assert只檢驗一個條件,因為同時檢驗多個條件時,如果斷言失敗,無法直觀的判斷是哪個條件失敗   不好: assert(nOffset>=0 && nOffset+nSize<=m_nInfomationSize);   好:  assert(nOffset >

C言中fopen函式用法詳解

fopen函式用來開啟一個檔案,其呼叫的一般形式為:檔案指標名=fopen(檔名,使用檔案方式); 其中,“檔案指標名”必須是被說明為FILE 型別的指標變數;“檔名”被開啟檔案的檔名,是字串常量或字串陣列,要求是全路徑;“使用檔案方式”是指檔案的型別和操作要求。 檔案使用方

c言中rand()函式用法筆記

最近在學著用c寫一些小程式,過程中遇到很多問題,在網上查很多大神的講解,以及查閱vs2010的幫助文件。在此做個筆記,以便今後查閱,備忘。感謝無私奉獻講解的大神們! 一、rand() rand()函式用來產生隨機數,但是,rand()的內部實現是用線性同餘法實現的,是偽隨機數,由於週期較長,

c言中getchar函式用法,涉及EOF檔案結束符的問題

 最近因為遇到了這個EOF的問題就查了下,一下的這些內容幫助我解決了困惑已久的問題,寫在這個希望能夠幫助遇到同樣問題的朋友!       在C語言中有個重要的庫函式getchar(),可從終端獲得一個字元的ASCII碼值。在終端輸入字元時並非輸入一個字元就會返回,而是在遇到

C言中#define的用法

inux 就是 linu head 突出 開發 ffffff 條件 就會 1.簡單的define定義#define MAXTIME 1000一個簡單的MAXTIME就定義好了,它代表1000,如果在程序裏面寫if(i<MAXTIME){.........}編譯器在處理

C言中的volatile用法

Part 1:字首理論知識介紹 1 > 編譯器的優化         由於記憶體訪問速度遠不及CPU處理速度,為提高機器整體效能,在硬體上引入硬體快取記憶體Cache,加速對記憶體的訪問。另外在現代CPU中指令的執行並不一定嚴格按照

c言中 gotoxy() 函式的使用

轉自  https://blog.csdn.net/radjedef/article/details/79028329 #include <stdio.h> #include <windows.h> void gotoxy(int x, int y) {

關於C言中printf函式“輸出歧視”的問題

目錄 關於C語言中printf函式“輸出歧視”的問題 問題描述 探索問題原因 另一種研究方法 問題結論 關於C語言中printf函式“輸出歧視”的問題 問題描述 昨天晚上被問到一個問題,為什麼在同一個printf函式中兩次輸出一個double型變

(C言中printf函式讀取的具體分析)

(C語言中printf函式讀取的具體分析) 不多說,直接上。printf函式將傳入的資料傳送到記憶體堆區(緩衝區),然後再根據前面的(格式說明符一個個讀取,這樣會造成錯誤) #include<stdio.h> #include<limits.h> #incl

C言中main函式引數使用

在C99標準中定義main函式兩種正確的寫法 int main(void); int main(int argc, char* argv[]); 常見的不標準寫法 void main() main()

C言中extern的用法

1.extern修飾變數或者函式的宣告。 舉例:若a.c中需引用b.c中的變數int v,可以在a.c中宣告extern int v,然後就可以引用變數v;需要注意的是,被引用的變數v的連結屬性必須是外連結(external)的,也就是說a.c要引用到變數v,不

c言中qsort的用法(模擬EXCEL)

排序方法有很多種:選擇排序,氣泡排序,歸併排序,快速排序等。 看名字都知道快速排序是目前公認的一種比較好的排序演算法。因為他速度很快,所以系統也在庫裡實現這個演算法,便於我們的使用。 這就是qsort函式(全稱quicksort)。它是ANSI C標準中提供的,其宣告在std

C言中 sizeof 特殊用法

6.23 Arithmetic on void- and Function-Pointers In GNU C, addition and subtraction operations are

C言中strlen函式的模擬實現n種方法

strlen 函式採用遞迴形式編寫 # include <stdio.h> # include <stdlib.h> int strlen (char* num) // 形參接受實參傳遞的陣列 {

c言中static關鍵字用法詳解

概述 static關鍵字在c語言中比較常用,使用恰當能夠大大提高程式的模組化特性,有利於擴充套件和維護。 但是對於c語言初學者,static由於使用靈活,並不容易掌握。本文就static在c語言中的應用進行總結,供參考使用。錯漏之處,請不吝指正。 在程

C言中scanf函式輸入回車符的問題

 在用c語言編寫輸入語句的時候常用到scanf函式,初學者在剛用scanf函式輸入時,經常會遇到各種各樣的輸入錯誤,最重要的是一定要記住scanf函式的輸入格式,scanf函式裡包含了哪些東西,輸入的時候就必須有哪些東西,比如:scanf("%c%c%c"),那麼輸入的時

c言中printf函式列印char型變數0xFF,輸出為0xFFFFFFFF的解決方法

問題描述:在編寫udp程式解析資料的時候,發現接收的char型變數為0xFF,但是使用printf後列印為0xFFFFFFFF,除錯程式查詢原因後發現使用char時,對於printf來說其值為0xFFFFFFFF。原因是%x要求的是無符號整形變數,你傳入的是char型,這裡有

C言中函式指標陣列的用途:轉移表

計算器的實現: 方法一: #include <stdio.h> int add(int a, int b) { return a + b; } int sub(int a, int b)

C言中 main 函式的引數 argc&argv

argc、argv用命令列編譯時有用 argc:整數 srgv:二維陣列、指標的指標、指標陣列 例子 #include<stdio.h> #include<stdlib.h> int main(int argc, char** argv) { i

c言中get()函式的原理及返回值

首先要記住的一句話就是Never use gets(). 這是因為gets()函式不檢查目標陣列是否能夠容納輸入,而若想把一個字串讀到程式中,最先要做的事情就是預留儲存字串的空間。所以這很容易導致分配的空間不夠大而陣列越界,然而gets()函式並不檢查這個方面,所以導致的結