Форум программистов, компьютерный форум CyberForum.ru

Чем отличаются по функционалу Kbhit() и _kbhit() - C++

Восстановить пароль Регистрация
 
OrkVasya
о_____О
 Аватар для OrkVasya
209 / 209 / 31
Регистрация: 19.11.2010
Сообщений: 1,015
Завершенные тесты: 1
19.08.2014, 13:52     Чем отличаются по функционалу Kbhit() и _kbhit() #1
Всем привет.
Утолите нубское любопытство.
Везде (на msdn, как минимум) пишут пользовать _kbhit() и что при этом происходит. Все просто и понятно.
Про kbhit() пишут только, что устарел еще во времена vs2005. И все.
А функционально чем они отличаются?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.08.2014, 13:52     Чем отличаются по функционалу Kbhit() и _kbhit()
Посмотрите здесь:

Чем отличаются ф-ии GlobalAllocPtr() и malloc()? C++
Чем отличаются указатели от ссылок? C++
Чем отличаются компиляторы? C++
чем отличаются static_cast от C++
Чем отличаются dynamic_cast и static_cast? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
BlackIce
309 / 171 / 64
Регистрация: 18.01.2014
Сообщений: 387
19.08.2014, 15:35     Чем отличаются по функционалу Kbhit() и _kbhit() #2
Объявлены, как:
C
1
2
int __cdecl kbhit(void);
int __cdecl _kbhit(void);
Ничем.

Более того, если в отладчике поставить точку останова на вызов этой функции, то при в итоге можно попасть на всю ту же _kbhit():

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int __cdecl _kbhit (
        void
        )
{
        int retval = 0;
 
        _mlock(_CONIO_LOCK);            /* secure the console lock */
        __TRY
            retval = _kbhit_nolock();           /* determine if a key is waiting */
        __FINALLY
            _munlock(_CONIO_LOCK);          /* release the console lock */
        __END_TRY_FINALLY
 
        return retval;
}
OrkVasya
о_____О
 Аватар для OrkVasya
209 / 209 / 31
Регистрация: 19.11.2010
Сообщений: 1,015
Завершенные тесты: 1
19.08.2014, 15:40  [ТС]     Чем отличаются по функционалу Kbhit() и _kbhit() #3
Прикольно, спасибо.
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5547 / 2561 / 233
Регистрация: 01.11.2011
Сообщений: 6,330
Завершенные тесты: 1
19.08.2014, 15:42     Чем отличаются по функционалу Kbhit() и _kbhit() #4
Цитата Сообщение от OrkVasya Посмотреть сообщение
А функционально чем они отличаются?
А вы найдите исходники да поглядите.
Цитата Сообщение от OrkVasya Посмотреть сообщение
Везде (на msdn, как минимум) пишут пользовать _kbhit() и что при этом происходит
И что при этом происходит? Чего пишут?


Ну а на самом деле, функции, начинающиеся с нижнего подчеркивания, обычно это чисто майкрософтовские поделки. Что они там внутрь засунули неизвестно. Что оно делает можно поглядеть в любом справочнике, а вот как оно это делает - таинство.
По этому на msdn и пишут про _kbhit, что впринципе логично: во-первых они свои плюшки продвигают, а во-вторых может быть там какая-либо оптимизация с остальными студийными плюшками задествована.
В общем, как подытог, если не планируете переносить свои проекты на другие компиляторы (если не хотите, чтобы ваш код запустился у того, кого вы к примеру попросили помощи, а у него не стоит студия, и вы обломаетесь) и густо используете прочие остальные исконно студийные функции, то пользуйтесь _kbhit и не парьтесь. В противном случае используйте функцию не начинающуюся с подчеркивания.
Конкретнее, о преимуществах той или иной реализации, можно будет разговаривать только видя собственно реализацию.
BlackIce
309 / 171 / 64
Регистрация: 18.01.2014
Сообщений: 387
19.08.2014, 15:44     Чем отличаются по функционалу Kbhit() и _kbhit() #5
В общем вот что выдает компилятор:
The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _kbhit. See online help for details.
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5547 / 2561 / 233
Регистрация: 01.11.2011
Сообщений: 6,330
Завершенные тесты: 1
19.08.2014, 15:47     Чем отличаются по функционалу Kbhit() и _kbhit() #6
Цитата Сообщение от BlackIce Посмотреть сообщение
компилятор тупо заменил устаревшее название новым
Во. Я так и думал.
BlackIce, а исходников родной функции не накопаете? Сравнить.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.08.2014, 15:55     Чем отличаются по функционалу Kbhit() и _kbhit()
Еще ссылки по теме:

Чем отличаются операторы вывода? C++
C++ Чем отличаются эти функции?
C++ Чем отличаются поля от переменных в классе?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
BlackIce
309 / 171 / 64
Регистрация: 18.01.2014
Сообщений: 387
19.08.2014, 15:55     Чем отличаются по функционалу Kbhit() и _kbhit() #7
Цитата Сообщение от SatanaXIII Посмотреть сообщение
компилятор тупо заменил устаревшее название новым
Нет, в ассемблерном листинге не заменяет, я ошибся, просто в асм добавляется знак подчеркивания:

kbhit -> _kbhit
_kbhit -> __kbhit

Но в отладчике, что так, что иначе все равно попадаешь на то, что я привел выше, похоже замена происходит при линковке.

Цитата Сообщение от SatanaXIII Посмотреть сообщение
BlackIce, а исходников родной функции не накопаете? Сравнить.
А какая родная ? Все, что накопал, опубликовал выше.
Yandex
Объявления
19.08.2014, 15:55     Чем отличаются по функционалу Kbhit() и _kbhit()
Ответ Создать тему
Опции темы

Текущее время: 17:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru