C中 #define 模仿 genericity programming from 《C 和 指標 》

來源:互聯網
上載者:User
/* * brief: genericity programming * */#include <stdio.h>#include <stdlib.h>#include <assert.h>#define GENERIC_STACK( STACK_TYPE, SUFFIX, STACK_SIZE )         \                                                                \        static  STACK_TYPE      stack##SUFFIX[ STACK_SIZE ];    \        static  int             top_element##SUFFIX = -1;       \                                                                \        int                                                     \        is_empty##SUFFIX( void )                                \        {                                                       \                return top_element##SUFFIX == -1;               \        }                                                       \                                                                \        int                                                     \        is_full##SUFFIX( void )                                 \        {                                                       \                return top_element##SUFFIX == STACK_SIZE - 1;   \        }                                                       \                                                                \        void                                                    \        push##SUFFIX( STACK_TYPE value )                        \        {                                                       \                assert( !is_full##SUFFIX() );                   \                top_element##SUFFIX += 1;                       \                stack##SUFFIX[ top_element##SUFFIX ] = value;   \        }                                                       \        void                                                    \        pop##SUFFIX( void )                                     \        {                                                       \                assert( !is_empty##SUFFIX() );                  \                top_element##SUFFIX -= 1;                       \        }                                                       \        STACK_TYPE                                              \        top##SUFFIX( void )                                     \        {                                                       \                assert( !is_empty##SUFFIX() );                  \                return stack##SUFFIX[ top_element##SUFFIX ];    \        }GENERIC_STACK( int, _int, 10 )/* GENERIC_STACK( float, _float, 5 ) */GENERIC_STACK( int, _int1, 10 )intmain(){        push_int( 5 );        push_int( 22 );        push_int( 15 );        push_int1( 4 );        push_int1( 23 );        push_int1( 16 );        /*push_float( 25.3 );        push_float( -40.5 );*/        while ( !is_empty_int() )        {                printf( "Popping %d\n", top_int() );                pop_int();        }        while ( !is_empty_int1() )        {                printf( "Popping %d\n", top_int1() );                pop_int1();        }        /*        while ( !is_empty_float() )        {                printf( "Popping %f\n", top_float() );                pop_float();        }*/        exit(0);}

  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.