Вопрос

Недавно я наткнулся на довольно необычную конвенцию по кодированию, в котором призыв к функции, возвращающейся «void», префиксирован (void).

например

(void) MyFunction();  

Это отличается от вызова функции, как:

MyFunction();  

У него есть какие-либо преимущества или это еще одно ненужную, но там кодируют конвенцию какой-то?

Это было полезно?

Решение

Некоторые функции, такие как PrintF (), возвращают значение, которое практически никогда не используется в реальном коде (в случае печати, количество напечатанных символов). Тем не менее, некоторые инструменты, как лишать, ждите, что если функция возвращает значение, оно должно быть использовано, и будет жаловаться, если вы не напишите что-то вроде:

int n = printf( "hello" );

Использование пустого листа:

(void) printf( "hello" );

Является ли способ рассказать такими инструментами, которые вы действительно не хотите использовать возвращаемое значение, что удерживайте их тихими. Если вы не используете такие инструменты, вам не нужно беспокоить, и в любом случае большинство инструментов позволяют настроить их для игнорирования возвратных значений из определенных функций.

Другие советы

Нет, нет никаких различий - то, что бросается в void - это возвращаемое значение функции.

Я бы сказал, что это может понять, что вы хотели сделать явную, вы не используете возвращаемое значение (вы называете его побочным эффектам), но как функция уже имеет пустоту возврата, это не имеет большого смысла Отказ

Если функция возвращает что-то, что пустота может избежать (!) ПРЕДУПРЕЖДЕНИЕ (Действительно, в коем случае, я не смог сделать GCC предупредить меня, что возвращаемое значение теряется) на некоторых компиляторах (или инструментах Lint); Но что более важно, это ясно, что возвращаемая стоимость «выбросила» умывально (а не по ошибке).

Ацемически: «Функция» всегда что-то возвращает, иначе это будет процедура. Таким образом, автор этого кода хочет сказать: «Я знаю, что это название не так, но я не буду изменять имя, поэтому я делаю это беспокойство видимым»

У него есть какие-либо преимущества или это еще одно ненужную, но там кодируют конвенцию какой-то?

Нет разницы. Это довольно распространенная конвенция, например, в тестировании программного обеспечения, чтобы подчеркнуть тот факт, что в контексте функция возврата функции, если таковая имеется, безопасна для отброса.

В страницах HPUX Man достаточно распространено в примере, чтобы просмотреть аккумуляцию в пустоту, чтобы обойти предупреждения Lint.

fprintf(mystream, "%s\n", "foo");

против.

(void)fprintf(mystream, "%s\n", "foo");

Это может быть, откуда автор кода. IMO, это не отличная идея, потому что большая часть семьи SprintF, например, называет malloc. Malloc потерпит неудачу, когда не хватает памяти. Сигинт также вызывает прерывание базового () Syscall (), чтобы прервать и не писать все буфер для членов семейства Printf ().

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top