test_assert.c

上一頁 | 首頁

    1 /*************************************************************************
    2  * test_assert : 測試assert.h所定義的宏及其所調用的函數。
    3  * 版權 (C) 2010 石仔<guoshimin57@gmail.com>
    4  * 本程序為自由軟件:你可以依據自由軟件基金會所發布的第三版GNU通用公共
    5  * 許可證重新發布、修改本程序。
    6  * 雖然基于使用目的而發布本程序,但不負任何擔保責任,亦不包含適銷性或特
    7  * 定目標之適用性的擔保。詳見GNU通用公共許可證。
    8  * 你應該已經收到一份附隨此程序的GNU通用公共許可證副本。否則,請參閱
    9  * <http://www.gnu.org/licenses/>。
   10  * ************************************************************************/
   11 
   12 #include <stdio.h>
   13 #include <stdlib.h>
   14 #include <signal.h>
   15 #include "_intl.h"
   16 
   17 extern void test_assert(void);
   18 extern void handle_abort(int signum);
   19 
   20 static int pass_flag=0;
   21 
   22 int main(void)
   23 {
   24     test_assert();
   25     return EXIT_FAILURE;
   26 }
   27 
   28 void handle_abort(int signum)
   29 {
   30     if(pass_flag == 1)
   31     {
   32         puts( _("<assert.h>成功通過本測試"));
   33         exit(EXIT_SUCCESS);
   34     }
   35     else
   36     {
   37         puts( _("<assert.h>不能通過本測試"));
   38         exit(EXIT_FAILURE);
   39     }
   40 }
   41 
   42 void test_assert(void)
   43 {
   44 #undef NDEBUG
   45 #include <assert.h>
   46     assert(signal(SIGABRT, handle_abort) != SIG_ERR);
   47 
   48 #define NDEBUG
   49 #include <assert.h>
   50     assert(1 == 1);
   51     assert(1 != 1);
   52 
   53 #undef NDEBUG
   54 #include <assert.h>
   55     assert(1 == 1);
   56     pass_flag=1;
   57     assert(1 != 1);
   58     puts( _("<assert.h>不能通過本測試"));
   59 }


版權 © 2024 石仔