• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C中#define模仿genericityprogrammingfrom《C和指针》

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
/*
 * 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 )

int
main()
{
        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);
}

  


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap