An anti-pattern, very common in C is the Function-Call Data-Structure Free-For-All (FCDSFFA). It is characterized by long functions, with long parameter lists and lots of global data all woven together with fine strands of spaghetti.
Avoid this pattern with OO design techniques like this:
In the header file:
//Hide the internal details of the data structure that is being managed with
//this typedef
typedef struct CircularBuffer CircularBuffer;
//Only some functions are allowed to access the hidden data
void CircularBuffer_Init(CircularBuffer*, int capacity);
void CircularBuffer_Destroy(CircularBuffer*);
int CircularBuffer_IsEmpty(CircularBuffer*);
int CircularBuffer_IsFull(CircularBuffer*);
int CircularBuffer_Put(CircularBuffer*, int);
int CircularBuffer_Get(CircularBuffer*);
int CircularBuffer_Capacity(CircularBuffer*);
void CircularBuffer_Print(CircularBuffer*);