C语言实现泛型-学习笔记

#include<stdlib.h>
#include"g_stack.h"

GENERIC_STACK(int,_int,10)
GENERIC_STACK(float,_float,5)

int main()

{
    push_int(5);
    push_int(22);
    push_int(15);
    push_float(25.3);
    push_float(-40.3);

    while(!is_empty_int())
    {
        printf("popping%d\n",top_int());
        pop_int();
    }
    while(!is_empty_float())
    {
        printf("popping%f\n",top_float());
        pop_float();
    }
    return EXIT_SUCCESS;

}

/*********************************************************************************************/

#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];\
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值