Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> (void) перед вызовом функции 
:(
    Опции темы
SABROG
  Дата 5.6.2010, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 1
Всего: 91



Видел пару раз такой код:

Код

bool foo()
{
...
    return true;
}

void bar()
{
    (void) foo();
}


Зачем пишут "(void)"?
---
А, всё нашел.

Цитата

Finally, a function call can be cast to void in order to explicitly discard a return value. For example, printf returns a value, but it is seldom used. Nevertheless, the two lines of code that follow are equivalent:

printf ("Hullo!\n");
(void) printf ("Hullo!\n");



Думаю с современной оптимизацией компилятора эта запись бесполезна.

Это сообщение отредактировал(а) SABROG - 5.6.2010, 14:44


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
mes
Дата 5.6.2010, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(SABROG @  5.6.2010,  13:42 Найти цитируемый пост)
Думаю с современной оптимизацией компилятора эта запись бесполезна.

дело не в оптимизации, а в логике.



--------------------
PM MAIL WWW   Вверх
SABROG
Дата 5.6.2010, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 1
Всего: 91



Есть еще вариант использовать (void), чтобы подавить варнинги компилятора, если идет проверка переменной в assert(), а программа собирается в release. Сам не проверял.
---
Так и есть. Qt использует эту технику:

Код

#if defined(Q_CC_INTEL) && !defined(Q_OS_WIN) || defined(Q_CC_RVCT)
template <typename T>
inline void qUnused(T &x) { (void)x; }
#  define Q_UNUSED(x) qUnused(x);
#else
#  define Q_UNUSED(x) (void)x;
#endif 

---
Цитата(mes @  5.6.2010,  14:53 Найти цитируемый пост)
дело не в оптимизации, а в логике.

Логика для переменных вроде ясна, а для функций какая? Сказать другому программисту типа "я знаю, что функция возвращает значение, но я его намеренно игнорирую."?

Это сообщение отредактировал(а) SABROG - 5.6.2010, 15:14


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
Dem_max
Дата 5.6.2010, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 4
Всего: 39



обычное приведение к типу void? зачем это делают я незнаю


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
SABROG
Дата 5.6.2010, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 1
Всего: 91



Есть еще такой вариант:

Код

(void) new QShortcut(Qt::Key_Enter, this, SLOT(fire()));


Я например всегда безымянные указатели без (void) создавал и никаких проблем небыло. Похоже я чего-то не понимаю. Если всё это ради Lint, то оно того не стоит.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
mes
Дата 5.6.2010, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(SABROG @  5.6.2010,  13:58 Найти цитируемый пост)
Сказать другому программисту типа "я знаю, что функция возвращает значение, но я его намеренно игнорирую."

да, только другой программист в принципе тут не при чем.. просто явно показать, что именно такого поведения и хотите..
smile

Добавлено через 2 минуты и 52 секунды
p.s. и вообще это имхо "дурной тон", писать для других - под всех не угодить.. надо просто стараться писать ясно, чисто и красиво - тогда всем (и прежде всего себе ) будет приятно и понятно. 
smile



--------------------
PM MAIL WWW   Вверх
SABROG
Дата 5.6.2010, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 1
Всего: 91



От тролей я такой ответ получил:

Цитата

Certain compilers would issue a warning on calling functions that are defined to return a value and then ignoring that return value. Casting the return value to void would tell the compiler (and anyone reading the code) that the discarding of it was intentional. So the compilation warning would go away.

Not sure whether any compilers still have this warning. At least some static code analysers do.


То есть по идее должны существовать компиляторы, которые умеют ругаться на программиста, который не проверяет возвращаемые значения.
---
Оказывается компилятор GCC имеет аттрибут __attribute__((warn_unused_result)), который начнет выдавать предупреждения, однако по умолчанию он этого не делает. Кроме того через "(void)" это предупреждение не вырубить.

Это сообщение отредактировал(а) SABROG - 5.6.2010, 18:44


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0600 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.