I noticed the following 2 signatures:
CBOR_API CborError cbor_encode_float(CborEncoder *encoder, const float *value);
CBOR_API CborError cbor_encode_double(CborEncoder *encoder, const double *value);
Why would these take pointers to a float/double rather than the float/double themselves? This is fairly inconsistent with the implementation of cbor_encode_int.