prefer BC_API/BC_HIDDEN over potentially confusing BC_PUBLIC/BC_PRIVATE