<pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

          <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

          <p id="bbfd9"></p>

          <p id="bbfd9"><cite id="bbfd9"></cite></p>

            <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

            <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
            <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>

            C語言的assert斷言宏

            時間:2025-10-10 17:25:50 C語言

            C語言的assert斷言宏

              大家在學習C語言的時候對于assert斷言宏了解多少呢?今天小編要為大家帶來的是C語言的assert斷言宏的相關知識,希望可以在大家學習C語言的時候有所幫助,一起來看看吧!

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

              #include

              void assert( int expression );

              assert的作用是現計算表達式 expression ,如果其值為假(即為0),那么它先向stderr打印一條出錯信息,然后通過調用 abort 來終止程序運行。

              如果assert()終止了程序,它首先會顯示失敗的測試、包含測試的文件名和行號。

              示例:

            1
            2
            3
            4
            5
            6
            7
            8
            9
            10
            11
            12
            13
            14
            15
            16
            17
            18
            19
            20
            21
            22
            23
            24
            25
            26
            27
            28
            29
            30
            31
            32
            33
            34
            35
            36
            37
            /* assert.c -- use assert() */
             
            #include
             
            #include
             
            #include
             
            int main()
             
            {
             
            double x, y, z;
             
            puts("Enter a pair of numbers (0 0 to quit): ");
             
            while (scanf("%lf%lf", &x, &y) == 2
             
            && (x != 0 || y != 0))
             
            {
             
            z = x * x - y * y; /* should be + */
             
            assert(z >= 0);
             
            printf("answer is %f ", sqrt(z));
             
            puts("Next pair of numbers: ");
             
            }
             
            puts("Done");
             
            return 0;
             
            }

              下面是該程序的運行示例:

            1
            Enter a pair of numbers (0 0 to quit):

              4 3 [用戶輸入]

            1
            2
            3
            answer is 2.645751
             
            Next pair of numbers:

              5 3 [用戶輸入]

            1
            2
            3
            answer is 4.000000
             
            Next pair of numbers:

              3 5 [用戶輸入]

            1
            assertion "z >= 0" failed: file "assert.c", line 14, function: main

              該程序在求平方根之前,該程序斷言z是否大于0或等于0。程序還錯誤地減去一個值而不是加上一個值,故意讓z得不到合適的值。

              具體的錯誤提示音編譯器而異。這條消息指明的是沒有滿足z>=0的條件。

              用if語句也能完成類似的任務:

            1
            2
            3
            4
            5
            6
            7
            8
            9
            if (z<0)
             
            {
             
            puts("z less than 0");
             
            abort();
             
            }

              但是使用asset()有幾個好處:它不僅能自動標識文件和出問題的行號,還有一種無需修改代碼就能開啟或關閉assert()的機制。在調試結束后,可以通過在包含#include 的語句之前插入#define NDEBUG來禁用assert調用,示例代碼如下:

            1
            2
            3
            4
            5
            #include
             
            #define NDEBUG
             
            #include

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

              使用assert的缺點是,頻繁的調用會極大的影響程序的性能,增加額外的開銷。

              一些建議:

              使用斷言捕捉不應該發生的非法情況。不要混淆非法情況與錯誤情況之間的區別,后者是必然存在的并且是一定要作出處理的。 在函數的入口處,使用斷言檢查參數的有效性(合法性)。 在編寫函數時,要進行反復的考查,并且自問:“我打算做哪些假定?”一旦確定了的假定,就要使用斷言對假定進行檢查。 一般教科書都鼓勵程序員們進行防錯設計,但要記住這種編程風格可能會隱瞞錯誤。當進行防錯設計時,如果“不可能發生”的事情的確發生了,則要使用斷言進行報警。


            【C語言的assert斷言宏】相關文章:

            C語言assert用法12-20

            assert用法(C語言)12-17

            C語言assert的用法11-18

            C語言中的assert用法12-23

            C語言中assert用法02-26

            C語言中assert的用法01-29

            C語言中assert的用法講解11-29

            C語言assert的用法有哪些10-07

            C語言宏定義01-19

                    <pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

                    <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

                    <p id="bbfd9"></p>

                    <p id="bbfd9"><cite id="bbfd9"></cite></p>

                      <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

                      <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
                      <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
                      飘沙影院