Можно ли программно вывести спецификатор формата для типа данных? Например, если печать длится долго, она автоматически делает что-то вроде:
printf("Vlaue of var is <fmt_spec> ", var);
Я также чувствую, что это уменьшит количество ошибок со стороны разработчика, поскольку что-то вроде
printf("Name is %s",int_val); //Oops, int_val would be treated as an address
printf("Name is %s, DOB is",name,dob); // missed %d for dob
printf("Name is %s DOB is %d", name);//Missed printing DOB
Я понимаю, что у последних двух есть предупреждения, но не было бы лучше, если бы выдавались ошибки, поскольку в большинстве случаев это будет проблематично? Или я что-то упускаю или для этого уже есть конструкции?
%o
и%x
оба берутunsigned int
;%e
,%f
,%g
все берутdouble
;%d
,%i
,%c
все берутint
. Вот почему вы не можете (вообще) вывести их из аргументов. - person melpomene   schedule 20.06.2017gcc -std=c11 -Wall -Wextra -Wconversion -Wpedantic -Werror …
и вуаля! Жизнь была бы намного безопаснее, если бы производители огнестрельного оружия не просверливали такие длинные отверстия в стволах. Ой, подождите, тогда эти вещи не имели бы смысла… - person too honest for this site   schedule 21.06.2017printf("%hhd, some_int);
, так как спецификаторы печати sub-int/unsigned
соответствуют всемint/unsigned
. - person chux - Reinstate Monica   schedule 21.06.2017