抽象类型声明实例
在本例中,将列出一个完整的栈
特点:
- 类型无关
- 同一个类型的可以声明多次
- 使用#define完成以上特性
- 使用assert断言完成合法性检查
//stack.c
#include<assert.h>
#
#define GENERATE_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( STACK_TYPE value) \
{ \
assert(!is_empty##SUFFIX()); \
top_element##SUFFIX -= 1; \
} \
\
STACK_TYPE top##SUFFIX( void) \
{ \
assert(!is_empty##SUFFIX()); \
return stack##SUFFIX[top_element##SUFFIX]; \
} \
//main.c
#include<stdio.h>
#include<stdlib.h>
#include"stack.h"
GENERATE_STACK(int,_int_1,10)
GENERATE_STACK(float,_float_1,5)
int main()
{
push_int_1(5);
push_float_1(0.3);
}
网友评论