This is the code that **Toby Speight** suggested in his answer:

```c
/*
 * int	sbprintf(char buff[restrict], int *restrict written,
 *								const char *restrict format, ...);
 */
#define sbprintf(buff, written, format, ...)	(						\
{																		\
		int		len_;													\
																		\
		alx_static_assert_array(buff);									\
																		\
		len_	= snprintf((buff), sizeof(buff), format, ##__VA_ARGS__);\
		if (written != NULL)											\
				*written = len_;										\
		len_ >= (int)sizeof(buff);										\
}																		\
)
```

_________________________________________________

I have tested it and works as expected:

 - If `written` is `NULL` it doesn't write into it.
 - The return value is `true` when the string is truncated and `false` otherwise.
 - It doesn't compile if `buff` is not an array.
 - It accepts a variable number of arguments after `format`, including no arguments.

The comment above the macro is the prototype that a user should see, to better understand the usage, although a real function with that prototype wouldn't work because of the array decaying to a pointer.

____________________________________

Comments about the style:

I tried to follow the Linux Kernel Coding Style, but there have been exceptions:

`if (written != NULL)` is used instead of `if (written)` to avoid the compiler complaining:

```
main.c:22:23: error: the address of ‘w1’ will always evaluate as ‘true’ [-Werror=address]
  if (alx_sbprintf(b1, &w1, test))
                       ^
.../libalx/base/stdio/sbprintf.h:36:6: note: in definition of macro ‘alx_sbprintf’
  if (written)       \
      ^~~~~~~
```