Страницы

Поиск по вопросам

понедельник, 2 декабря 2019 г.

Зачем ставить (void) перед printf и другими функциями?

#c


Изучаю С на примере репозитория: https://github.com/ankushagarwal/nweb/blob/master/nweb23.c
И собственно вопрос - зачем ставить (void) перед printf и другими функциями?

(void)sprintf(...);

    


Ответы

Ответ 1



Функция printf не является void-функцией. Она возвращает в вызывающий код значение типа int. Таким способом - приведением возвращенного значения к типу void - автор кода дает понять компилятору (и читателю кода) то, что возвращаемое значение функции printf было проигнорировано им намеренно. Для некоторых функций игнорирование возвращаемого ими значения является нормальной ситуацией (например, printf или strcpy). Для других функций игнорирование их возвращаемого значения обычно свидетельствует о грубой ошибке в коде (например, malloc или fopen). Многие компиляторы предоставляют [нестандарные] средства для пометки функций как принадлежащих первой или второй группе. Если проигнорировать возвращаемое значение функции второй группы, то компилятор выдаст [нестандарное] диагностическое сообщение. Однако в некоторых группах разработчиков можно встретить "драконовскую" установку на то, что возвращаемые значения функций никогда нельзя просто неявно игнорировать (и компилятор конфигурируется на безусловную выдачу диагностических сообщений в таких случаях). Это довольно бессмысленное требование, но тем не менее оно встречается. И в такой ситуации, чтобы избавиться от диагностики, разработчику приходится вот таким способом явно сообщать компилятору, что значение проигнорировано намеренно.

Комментариев нет:

Отправить комментарий