From my yesterday night live streaming about minimalist Twitter CLI in C, I have found interesting and good approach in library design used in one of the most important library out there; Openssl.
They are as follows
Expose struct name but not struct definition to user
User use such name to refer to somewhat context used during working with Openssl API without a need to include relevant header as mostly we don't directly access attribute of such struct. This can be seen from
BIOwhich is defined via
typedef struct bio_st BIO(in ./include/openssl/ossl_typ.h which is available for use in public). Its structure definition is defined inside internal header file ./include/openssl/ossl_typ.h.
Use full UPPERCASE for struct name
Following code will clearly explain this point.
... BIO* bio, *b64; BUF_MEM *buffer_ptr; b64 = BIO_new(BIO_f_base64()); bio = BIO_new(BIO_s_mem()); bio = BIO_push(b64, bio); ...
Function name is prefixed with struct name in UPPERCASE then follows with snake_case of function name. This approach is similar to what allergro.