zoukankan      html  css  js  c++  java
  • C中 #define 模仿 genericity programming from 《C 和 指针 》

    /*
     * 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);
    }
    

      

  • 相关阅读:
    4-----flask快速入门
    2-----python 常用数据结构回顾以及推导式
    2-1 test 代码梳理,各个目录说明
    13----- sentry实现错误日志的监控
    2----生鲜超市 (开发环境搭建)
    2、虚拟环境
    1、DRF+VUE 项目架构
    jenkins介绍,Jenkins安装,Jenkins发布PHP代码
    dsad
    rest_framework自己总结的
  • 原文地址:https://www.cnblogs.com/lxgeek/p/2179683.html
Copyright © 2011-2022 走看看