Потребность в добавлении префикса функции с (пустотой)

Я недавно столкнулся с довольно необычной конвенцией кодирования, где призыв к возврату функции "пусто" снабжается префиксом (пустоту).

например.

(void) MyFunction();  

Это несколько отличающийся от вызова функции как:

MyFunction();  

Это получило какое-либо преимущество, или действительно ли это еще одно бесполезный, но там кодирующая какая-то конвенция?

5
задан puffadder 14 June 2010 в 08:44
поделиться

6 ответов

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

int n = printf( "hello" );

с использованием преобразования void:

(void) printf( "hello" );

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

12
ответ дан 18 December 2019 в 13:11
поделиться

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

0
ответ дан 18 December 2019 в 13:11
поделиться

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

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

против.

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

Возможно, именно отсюда и исходит автор кода. IMO, это не лучшая идея, потому что большая часть семейства sprintf, например, вызывает malloc. malloc завершится ошибкой при нехватке памяти. SIGINT также вызывает прерывание базового системного вызова write (), а не запись всего буфера для членов семейства printf ().

0
ответ дан 18 December 2019 в 13:11
поделиться

Если функция возвращает что-то, void может избежать (!) Предупреждения (действительно, я никак не мог заставить gcc предупреждать меня, что возвращаемое значение потеряно) на некоторых компиляторах (или инструментах lint); но, что более важно, он дает понять, что возвращаемое значение «выбрасывается» намеренно (а не по ошибке).

0
ответ дан 18 December 2019 в 13:11
поделиться

Есть ли у него какое-то преимущество или это еще одно ненужное, но есть какое-то соглашение о кодировании?

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

0
ответ дан 18 December 2019 в 13:11
поделиться

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

Я бы сказал, что это может иметь смысл, если вы хотите явно указать, что вы не используете возвращаемое значение (вы вызываете его из-за побочных эффектов), но поскольку функция уже имеет void return, это не так. имеет много смысла.

2
ответ дан 18 December 2019 в 13:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: