类的封装方式
- 以文件作为封装边界, 将外部调用的函数声明, 全局变量变量放入头文件中, 将具体实现放入.c文件中。
简单栈的实现代码:
/****************************************
*@file: stack.h
*****************************************/
#ifndef _STACK_H_
#define _STACK_H_
#ifdef __cplusplus
extern "C" {
#endif
bool push(int val);
bool pop(int *pRet);
void show(void);
#ifdef __cplusplus
}
#endif
#endif
/****************************************
*@file: stack.c
*****************************************/
#include <stdbool.h>
#include <stdio.h>
#include "stack.h"
static int buf[16];
static int top = 0;
static bool isStackFull(void)
{
return top == sizeof(buf) / sizeof(int);
}
static bool isStackEmpty(void)
{
return top == 0;
}
bool push(int val)
{
if (isStackFull())
{
return false;
}
buf[top++] = val;
return true;
}
bool pop(int *pRet)
{
if (isStackEmpty())
{
return false;
}
*pRet = buf[--top];
return true;
}
void show(void)
{
if (isStackFull())
{
printf("stack is empty\n");
}
for (int i = 0; i < top; i++)
{
printf("%d\n", buf[i]);
}
}
为了使这些不对外暴露,仅仅对所在文件的范围可见(Stack.c)可以使用static关键字改变链接属性