#define p_stack_start(_s, _t, _n) do{ \ typedef _t type_##_s; \ type_##_s _buf_##_s[_n]; \ int _max_##_s = _n-1; \ int _top_##_s = -1 #define p_stack_end(_s) _max_##_s = 0;_top_##_s = -1; \ }while(0) #define p_empty(_s) (_top_##_s < 0) #define p_full(_s) (_top_##_s >= _max_##_s) #define p_push(_s, _x) (!p_full(_s) ? (_buf_##_s[++(_top_##_s)]= _x, 1) : 0) #define p_pop(_s) (!p_empty(_s) ? ((_top_##_s)--, 1) : 0) #define p_top(_s) (!p_empty(_s) ? _buf_##_s[_top_##_s] : (type_##_s)0)
用法如下:
p_stack_start(s1, int, 16); for(i = 0; i < 16; i++) p_push(s1, i+1); for(i = 0; i < 16; i++) { printf("[%d]=%d\n", 16-i, p_top(s1)); p_pop(s1); } p_stack_end(s1);