Question: I am trying to write a generic library in pure c , just some data structures like stack, queue...

In my stack.h when giving name to those functions. I have questions about that.

1. Can I use such name, for example "init" as the function name to init a stack. Will there be something wrong?
2. I know maybe there exist other functions which just do other things and have the same name as "init". Then would the program be confused, especially when i both include the different init's headers.

3.I know my worry may be unnecessary, but i still want to know the principle.

Any help is appreciated, thanks.

Answer: 
> 
> Can I use such name, for example "init" as the function name to init a
>  stack. Will there be something wrong?
> 
> 
> 

Yes, if anyone else wants a function named `init`.

> 
> I know my worry may be unnecessary, but i still want to know the
>  principle
> 
> 
> 

Your worry is necessary, this (the lack of namespaces) is a serious problem in C.

* Export as few functions as possible. Make everything `static` if you can
* Prefix function names with something. For instance, instead of `init`, try `stack_init`
There might be existing libraries doing what you want (e.g. [Glib](http://developer.gnome.org/glib)). At least, study them a little before writing your own.

If you claim to develop a generic reusable C library, I suggest having naming conventions. For instance, have all the identifiers (notably function names, typedef-s, struct names...) share some common prefix.

Be systematic in your naming conventions. For instance, initializers for stacks and for queues should have similar names & signatures, and end with `_init`. Document your naming conventions.

Define very clearly how should data be allocated and released. Who and when should call free?