Преобразование типов результатов функций, без их последующего использования

Рейтинг: 0Ответов: 1Опубликовано: 05.06.2011

Зачем нужно преобразовывать тип результата функции если ты его дальше не собираешься использовать? Сейчас я говорю о простых типах, а не классах (там в принципе можно и оператор преобразования типа переопределить)...

Итак пример, взят отсюда:

#include <stdio.h>
#include <stdlib.h>
main()
{
       char *cmd = "/usr/bin/ls *.c";
       char buf[BUFSIZ];
       FILE *ptr;

       if ((ptr = popen(cmd, "r")) != NULL) {
               while (fgets(buf, BUFSIZ, ptr) != NULL)
                       (void) printf("%s", buf);
               (void) pclose(ptr);
       }
       return 0;
}

Зачем писать (void) printf("%s", buf); вместо printf("%s", buf); ? Есть ли в этом какой-то потайной смысл?


P.S. мне это кажется бессмысленным, однако может это из разряда best practices?

Например, к best practices относится следующая рекомендация: в сравнениях писать константу слева от переменной, чтобы по ошибке, указав "=" вместо "==" не нарваться на трудно уловимый баг, а если поставить константу слева то возникнет ошибка компиляции и баг тут же будет исправлен. Пример:

Писать if (12 == a){...}, вместо if (a == 12){...}.

Ответы

▲ 1Принят

Зачем писать (void) printf("%s", buf); вместо printf("%s", buf);

Я считаю, что бессмысленно. Пример кода приведен явно Сишный. Возможно необходимость писать (void) - особенность какого-то определенного компилятора.