Usando o pré-processador C para construir uma string literal para scanf?

Estou tentando criar umsscanf literal de string para ajudar na prevenção de saturação de buffer em C99. O objetivo é algo como:

#define MAX_ARG_LEN   16

char arg[MAX_ARG_LEN] = "";

if (sscanf(arg, "%"(MAX_ARG_LEN-1)"X", &input) > 0)

A solução óbvia "manual" é algo como:

#define MAX_ARG_LEN   16
#define MAX_ARG_CHARS "15"

char arg[MAX_ARG_LEN] = "";

if (sscanf(arg, "%"MAX_ARG_CHARS"X", &input) > 0)

No entanto, eu preferiria algo para gerar automaticamente "% 15X", considerando um tamanho de buffer 16. Este link équase funciona para o meu aplicativo:Converter um token de pré-processador em uma sequência mas não lida com o -1.

Sugestões?

questionAnswers(1)

yourAnswerToTheQuestion