Abstract data types in C