diff --git a/include/icsneo/icsneotypes.h b/include/icsneo/icsneotypes.h index a5d2f81..b4b30f4 100644 --- a/include/icsneo/icsneotypes.h +++ b/include/icsneo/icsneotypes.h @@ -1,5 +1,10 @@ #pragma once +// _Static_assert support, this can be removed once C23 is the "standard" +#if __STDC_VERSION__ < 202311L && !defined(__cplusplus) +#include +#endif + #ifdef __cplusplus extern "C" { #endif @@ -128,9 +133,20 @@ typedef enum _icsneo_devicetype_t { icsneo_devicetype_vividcan, // neoOBD2 SIM icsneo_devicetype_obd2_sim, + + + // Must be last entry + icsneo_devicetype_maxsize, } _icsneo_devicetype_t; -typedef uint64_t icsneo_devicetype_t; +typedef uint32_t icsneo_devicetype_t; + +// Make sure icsneo_devicetype_t is never smaller than the actual enum +#if __STDC_VERSION__ < 202311L && !defined(__cplusplus) +_Static_assert(sizeof(_icsneo_devicetype_t) <= sizeof(icsneo_devicetype_t)); +#else // C++ or C23 +static_assert(sizeof(_icsneo_devicetype_t) <= sizeof(icsneo_devicetype_t)); +#endif #ifdef __cplusplus }