diff --git a/demo/common/overview.c b/demo/common/overview.c index 45458543b..fc28269d1 100644 --- a/demo/common/overview.c +++ b/demo/common/overview.c @@ -444,7 +444,7 @@ overview(struct nk_context *ctx) } /* progressbar combobox */ sum = prog_a + prog_b + prog_c + prog_d; - sprintf(buffer, "%lu", sum); + sprintf(buffer, "%" NK_FMT_SIZE, sum); if (nk_combo_begin_label(ctx, buffer, nk_vec2(200,200))) { nk_layout_row_dynamic(ctx, 30, 1); nk_progress(ctx, &prog_a, 100, NK_MODIFIABLE); @@ -456,7 +456,7 @@ overview(struct nk_context *ctx) /* checkbox combobox */ sum = (size_t)(check_values[0] + check_values[1] + check_values[2] + check_values[3] + check_values[4]); - sprintf(buffer, "%lu", sum); + sprintf(buffer, "%" NK_FMT_SIZE, sum); if (nk_combo_begin_label(ctx, buffer, nk_vec2(200,200))) { nk_layout_row_dynamic(ctx, 30, 1); nk_checkbox_label(ctx, weapons[0], &check_values[0]); diff --git a/nuklear.h b/nuklear.h index 8581bbc0a..9f03861b3 100644 --- a/nuklear.h +++ b/nuklear.h @@ -337,8 +337,9 @@ extern "C" { * * =============================================================== */ - #ifdef NK_INCLUDE_FIXED_TYPES +#ifdef NK_INCLUDE_FIXED_TYPES #include + #include #define NK_INT8 int8_t #define NK_UINT8 uint8_t #define NK_INT16 int16_t @@ -347,37 +348,71 @@ extern "C" { #define NK_UINT32 uint32_t #define NK_SIZE_TYPE uintptr_t #define NK_POINTER_TYPE uintptr_t + #define NK_INT8_FMT PRIi8 + #define NK_UINT8_FMT PRIu8 + #define NK_INT16_FMT PRIi16 + #define NK_UINT16_FMT PRIu16 + #define NK_INT32_FMT PRIi32 + #define NK_UINT32_FMT PRIu32 + #define NK_SIZE_TYPE_FMT PRIuPTR + #define NK_POINTER_TYPE_FMT PRIxPTR #else #ifndef NK_INT8 #define NK_INT8 signed char #endif + #ifndef NK_INT8_FMT + #define NK_INT8_FMT "i" + #endif #ifndef NK_UINT8 #define NK_UINT8 unsigned char #endif + #ifndef NK_UINT8_FMT + #define NK_UINT8_FMT "u" + #endif #ifndef NK_INT16 #define NK_INT16 signed short #endif + #ifndef NK_INT16_FMT + #define NK_INT16_FMT "i" + #endif #ifndef NK_UINT16 #define NK_UINT16 unsigned short #endif + #ifndef NK_UINT16_FMT + #define NK_UINT16_FMT "u" + #endif #ifndef NK_INT32 - #if defined(_MSC_VER) + #if defined(_MSC_VER) || defined(__MINGW32__) || defined(__MINGW64__) #define NK_INT32 __int32 #else #define NK_INT32 signed int #endif #endif + #ifndef NK_INT32_FMT + #if defined(_MSC_VER) || defined(__MINGW32__) || defined(__MINGW64__) + #define NK_INT32_FMT "I32d" + #else + #define NK_INT32_FMT "i" + #endif + #endif #ifndef NK_UINT32 - #if defined(_MSC_VER) + #if defined(_MSC_VER) || defined(__MINGW32__) || defined(__MINGW64__) #define NK_UINT32 unsigned __int32 #else #define NK_UINT32 unsigned int #endif #endif + #ifndef NK_UINT32_FMT + #if defined(_MSC_VER) || defined(__MINGW32__) || defined(__MINGW64__) + #define NK_UINT32_FMT "I32u" + #else + #define NK_UINT32_FMT "u" + #endif + #endif #ifndef NK_SIZE_TYPE - #if defined(_WIN64) && defined(_MSC_VER) + #if (defined(_WIN64) && defined(_MSC_VER)) || defined(__MINGW64__) #define NK_SIZE_TYPE unsigned __int64 - #elif (defined(_WIN32) || defined(WIN32)) && defined(_MSC_VER) + #elif ((defined(_WIN32) || defined(WIN32)) && defined(_MSC_VER)) || defined(__MINGW32__) #define NK_SIZE_TYPE unsigned __int32 #elif defined(__GNUC__) || defined(__clang__) #if defined(__x86_64__) || defined(__ppc64__) || defined(__PPC64__) || defined(__aarch64__) @@ -389,10 +424,25 @@ extern "C" { #define NK_SIZE_TYPE unsigned long #endif #endif + #ifndef NK_SIZE_TYPE_FMT + #if (defined(_WIN64) && defined(_MSC_VER)) || defined(__MINGW64__) + #define NK_SIZE_TYPE_FMT "I64u" + #elif ((defined(_WIN32) || defined(WIN32)) && defined(_MSC_VER)) || defined(__MINGW32__) + #define NK_SIZE_TYPE_FMT "I32u" + #elif defined(__GNUC__) || defined(__clang__) + #if defined(__x86_64__) || defined(__ppc64__) || defined(__PPC64__) || defined(__aarch64__) + #define NK_SIZE_TYPE_FMT "lu" + #else + #define NK_SIZE_TYPE_FMT "u" + #endif + #else + #define NK_SIZE_TYPE_FMT "lu" + #endif + #endif #ifndef NK_POINTER_TYPE - #if defined(_WIN64) && defined(_MSC_VER) + #if (defined(_WIN64) && defined(_MSC_VER)) || defined(__MINGW64__) #define NK_POINTER_TYPE unsigned __int64 - #elif (defined(_WIN32) || defined(WIN32)) && defined(_MSC_VER) + #elif ((defined(_WIN32) || defined(WIN32)) && defined(_MSC_VER)) || defined(__MINGW32__) #define NK_POINTER_TYPE unsigned __int32 #elif defined(__GNUC__) || defined(__clang__) #if defined(__x86_64__) || defined(__ppc64__) || defined(__PPC64__) || defined(__aarch64__) @@ -404,6 +454,21 @@ extern "C" { #define NK_POINTER_TYPE unsigned long #endif #endif + #ifndef NK_POINTER_TYPE_FMT + #if (defined(_WIN64) && defined(_MSC_VER)) || defined(__MINGW64__) + #define NK_POINTER_TYPE_FMT "I64x" + #elif ((defined(_WIN32) || defined(WIN32)) && defined(_MSC_VER)) || defined(__MINGW32__) + #define NK_POINTER_TYPE_FMT "I32x" + #elif defined(__GNUC__) || defined(__clang__) + #if defined(__x86_64__) || defined(__ppc64__) || defined(__PPC64__) || defined(__aarch64__) + #define NK_POINTER_TYPE_FMT "lx" + #else + #define NK_POINTER_TYPE_FMT "x" + #endif + #else + #define NK_POINTER_TYPE_FMT "lx" + #endif + #endif #endif #ifndef NK_BOOL @@ -415,6 +480,16 @@ extern "C" { #endif #endif +#define NK_FMT_CHAR NK_INT8_FMT +#define NK_FMT_UCHAR NK_UINT8_FMT +#define NK_FMT_BYTE NK_UINT8_FMT +#define NK_FMT_SHORT NK_INT16_FMT +#define NK_FMT_USHORT NK_UINT16_FMT +#define NK_FMT_INT NK_INT32_FMT +#define NK_FMT_UINT NK_UINT32_FMT +#define NK_FMT_SIZE NK_SIZE_TYPE_FMT +#define NK_FMT_PTR NK_POINTER_TYPE_FMT + typedef NK_INT8 nk_char; typedef NK_UINT8 nk_uchar; typedef NK_UINT8 nk_byte; @@ -30698,6 +30773,7 @@ nk_tooltipfv(struct nk_context *ctx, const char *fmt, va_list args) /// - [y]: Minor version with non-breaking API and library changes /// - [z]: Patch version with no direct changes to the API /// +/// - 2025/02/11 (4.12.5) - Add printf formatting macros for nk data types /// - 2024/12/11 (4.12.4) - Fix array subscript [0, 0] is outside array bounds of ‘char[1]’ /// - 2024/12/11 (4.12.3) - Fix border color for property widgets /// - 2024/11/20 (4.12.2) - Fix int/float type conversion warnings in `nk_roundf` diff --git a/src/CHANGELOG b/src/CHANGELOG index 89405d0c5..06a2f628a 100644 --- a/src/CHANGELOG +++ b/src/CHANGELOG @@ -7,6 +7,7 @@ /// - [y]: Minor version with non-breaking API and library changes /// - [z]: Patch version with no direct changes to the API /// +/// - 2025/02/11 (4.12.5) - Add printf formatting macros for nk data types /// - 2024/12/11 (4.12.4) - Fix array subscript [0, 0] is outside array bounds of ‘char[1]’ /// - 2024/12/11 (4.12.3) - Fix border color for property widgets /// - 2024/11/20 (4.12.2) - Fix int/float type conversion warnings in `nk_roundf` diff --git a/src/nuklear.h b/src/nuklear.h index 9b526566b..aa3385ee2 100644 --- a/src/nuklear.h +++ b/src/nuklear.h @@ -115,8 +115,9 @@ extern "C" { * * =============================================================== */ - #ifdef NK_INCLUDE_FIXED_TYPES +#ifdef NK_INCLUDE_FIXED_TYPES #include + #include #define NK_INT8 int8_t #define NK_UINT8 uint8_t #define NK_INT16 int16_t @@ -125,37 +126,71 @@ extern "C" { #define NK_UINT32 uint32_t #define NK_SIZE_TYPE uintptr_t #define NK_POINTER_TYPE uintptr_t + #define NK_INT8_FMT PRIi8 + #define NK_UINT8_FMT PRIu8 + #define NK_INT16_FMT PRIi16 + #define NK_UINT16_FMT PRIu16 + #define NK_INT32_FMT PRIi32 + #define NK_UINT32_FMT PRIu32 + #define NK_SIZE_TYPE_FMT PRIuPTR + #define NK_POINTER_TYPE_FMT PRIxPTR #else #ifndef NK_INT8 #define NK_INT8 signed char #endif + #ifndef NK_INT8_FMT + #define NK_INT8_FMT "i" + #endif #ifndef NK_UINT8 #define NK_UINT8 unsigned char #endif + #ifndef NK_UINT8_FMT + #define NK_UINT8_FMT "u" + #endif #ifndef NK_INT16 #define NK_INT16 signed short #endif + #ifndef NK_INT16_FMT + #define NK_INT16_FMT "i" + #endif #ifndef NK_UINT16 #define NK_UINT16 unsigned short #endif + #ifndef NK_UINT16_FMT + #define NK_UINT16_FMT "u" + #endif #ifndef NK_INT32 - #if defined(_MSC_VER) + #if defined(_MSC_VER) || defined(__MINGW32__) || defined(__MINGW64__) #define NK_INT32 __int32 #else #define NK_INT32 signed int #endif #endif + #ifndef NK_INT32_FMT + #if defined(_MSC_VER) || defined(__MINGW32__) || defined(__MINGW64__) + #define NK_INT32_FMT "I32d" + #else + #define NK_INT32_FMT "i" + #endif + #endif #ifndef NK_UINT32 - #if defined(_MSC_VER) + #if defined(_MSC_VER) || defined(__MINGW32__) || defined(__MINGW64__) #define NK_UINT32 unsigned __int32 #else #define NK_UINT32 unsigned int #endif #endif + #ifndef NK_UINT32_FMT + #if defined(_MSC_VER) || defined(__MINGW32__) || defined(__MINGW64__) + #define NK_UINT32_FMT "I32u" + #else + #define NK_UINT32_FMT "u" + #endif + #endif #ifndef NK_SIZE_TYPE - #if defined(_WIN64) && defined(_MSC_VER) + #if (defined(_WIN64) && defined(_MSC_VER)) || defined(__MINGW64__) #define NK_SIZE_TYPE unsigned __int64 - #elif (defined(_WIN32) || defined(WIN32)) && defined(_MSC_VER) + #elif ((defined(_WIN32) || defined(WIN32)) && defined(_MSC_VER)) || defined(__MINGW32__) #define NK_SIZE_TYPE unsigned __int32 #elif defined(__GNUC__) || defined(__clang__) #if defined(__x86_64__) || defined(__ppc64__) || defined(__PPC64__) || defined(__aarch64__) @@ -167,10 +202,25 @@ extern "C" { #define NK_SIZE_TYPE unsigned long #endif #endif + #ifndef NK_SIZE_TYPE_FMT + #if (defined(_WIN64) && defined(_MSC_VER)) || defined(__MINGW64__) + #define NK_SIZE_TYPE_FMT "I64u" + #elif ((defined(_WIN32) || defined(WIN32)) && defined(_MSC_VER)) || defined(__MINGW32__) + #define NK_SIZE_TYPE_FMT "I32u" + #elif defined(__GNUC__) || defined(__clang__) + #if defined(__x86_64__) || defined(__ppc64__) || defined(__PPC64__) || defined(__aarch64__) + #define NK_SIZE_TYPE_FMT "lu" + #else + #define NK_SIZE_TYPE_FMT "u" + #endif + #else + #define NK_SIZE_TYPE_FMT "lu" + #endif + #endif #ifndef NK_POINTER_TYPE - #if defined(_WIN64) && defined(_MSC_VER) + #if (defined(_WIN64) && defined(_MSC_VER)) || defined(__MINGW64__) #define NK_POINTER_TYPE unsigned __int64 - #elif (defined(_WIN32) || defined(WIN32)) && defined(_MSC_VER) + #elif ((defined(_WIN32) || defined(WIN32)) && defined(_MSC_VER)) || defined(__MINGW32__) #define NK_POINTER_TYPE unsigned __int32 #elif defined(__GNUC__) || defined(__clang__) #if defined(__x86_64__) || defined(__ppc64__) || defined(__PPC64__) || defined(__aarch64__) @@ -182,6 +232,21 @@ extern "C" { #define NK_POINTER_TYPE unsigned long #endif #endif + #ifndef NK_POINTER_TYPE_FMT + #if (defined(_WIN64) && defined(_MSC_VER)) || defined(__MINGW64__) + #define NK_POINTER_TYPE_FMT "I64x" + #elif ((defined(_WIN32) || defined(WIN32)) && defined(_MSC_VER)) || defined(__MINGW32__) + #define NK_POINTER_TYPE_FMT "I32x" + #elif defined(__GNUC__) || defined(__clang__) + #if defined(__x86_64__) || defined(__ppc64__) || defined(__PPC64__) || defined(__aarch64__) + #define NK_POINTER_TYPE_FMT "lx" + #else + #define NK_POINTER_TYPE_FMT "x" + #endif + #else + #define NK_POINTER_TYPE_FMT "lx" + #endif + #endif #endif #ifndef NK_BOOL @@ -193,6 +258,16 @@ extern "C" { #endif #endif +#define NK_FMT_CHAR NK_INT8_FMT +#define NK_FMT_UCHAR NK_UINT8_FMT +#define NK_FMT_BYTE NK_UINT8_FMT +#define NK_FMT_SHORT NK_INT16_FMT +#define NK_FMT_USHORT NK_UINT16_FMT +#define NK_FMT_INT NK_INT32_FMT +#define NK_FMT_UINT NK_UINT32_FMT +#define NK_FMT_SIZE NK_SIZE_TYPE_FMT +#define NK_FMT_PTR NK_POINTER_TYPE_FMT + typedef NK_INT8 nk_char; typedef NK_UINT8 nk_uchar; typedef NK_UINT8 nk_byte;