о_____О
Эксперт 1С
224 / 223 / 37
Регистрация: 19.11.2010
Сообщений: 1,062
1

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

19.08.2014, 13:52. Показов 2301. Ответов 6
Метки нет (Все метки)

Всем привет.
Утолите нубское любопытство.
Везде (на msdn, как минимум) пишут пользовать _kbhit() и что при этом происходит. Все просто и понятно.
Про kbhit() пишут только, что устарел еще во времена vs2005. И все.
А функционально чем они отличаются?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.08.2014, 13:52
Ответы с готовыми решениями:

kbhit
Привет всем. kbhit() умеет различать какая клавиша нажата? или для этого уже что то нужно посложнее?

Ошибка kbhit()
Добрый день, подскажите пожалуйста. При сборке программы выдаёт такую ошибку Ошибка 1 error...

Kbhit() - не определяется
Подпараграф "Вариация на тему цикла for" из книги Шилдта "C++ Базовый курс" предлагает вот такой...

Функция kbhit
как сделать чтобы функция kbhit реагировала не на любую нажатую клавишу, а только на определенную?

6
315 / 177 / 73
Регистрация: 18.01.2014
Сообщений: 387
19.08.2014, 15:35 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;
}
1
о_____О
Эксперт 1С
224 / 223 / 37
Регистрация: 19.11.2010
Сообщений: 1,062
19.08.2014, 15:40  [ТС] 3
Прикольно, спасибо.
0
Почетный модератор
Эксперт С++
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
19.08.2014, 15:42 4
Цитата Сообщение от OrkVasya Посмотреть сообщение
А функционально чем они отличаются?
А вы найдите исходники да поглядите.
Цитата Сообщение от OrkVasya Посмотреть сообщение
Везде (на msdn, как минимум) пишут пользовать _kbhit() и что при этом происходит
И что при этом происходит? Чего пишут?


Ну а на самом деле, функции, начинающиеся с нижнего подчеркивания, обычно это чисто майкрософтовские поделки. Что они там внутрь засунули неизвестно. Что оно делает можно поглядеть в любом справочнике, а вот как оно это делает - таинство.
По этому на msdn и пишут про _kbhit, что впринципе логично: во-первых они свои плюшки продвигают, а во-вторых может быть там какая-либо оптимизация с остальными студийными плюшками задествована.
В общем, как подытог, если не планируете переносить свои проекты на другие компиляторы (если не хотите, чтобы ваш код запустился у того, кого вы к примеру попросили помощи, а у него не стоит студия, и вы обломаетесь) и густо используете прочие остальные исконно студийные функции, то пользуйтесь _kbhit и не парьтесь. В противном случае используйте функцию не начинающуюся с подчеркивания.
Конкретнее, о преимуществах той или иной реализации, можно будет разговаривать только видя собственно реализацию.
1
315 / 177 / 73
Регистрация: 18.01.2014
Сообщений: 387
19.08.2014, 15:44 5
В общем вот что выдает компилятор:
The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _kbhit. See online help for details.
0
Почетный модератор
Эксперт С++
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
19.08.2014, 15:47 6
Цитата Сообщение от BlackIce Посмотреть сообщение
компилятор тупо заменил устаревшее название новым
Во. Я так и думал.
BlackIce, а исходников родной функции не накопаете? Сравнить.
0
315 / 177 / 73
Регистрация: 18.01.2014
Сообщений: 387
19.08.2014, 15:55 7
Цитата Сообщение от SatanaXIII Посмотреть сообщение
компилятор тупо заменил устаревшее название новым
Нет, в ассемблерном листинге не заменяет, я ошибся, просто в асм добавляется знак подчеркивания:

kbhit -> _kbhit
_kbhit -> __kbhit

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

Цитата Сообщение от SatanaXIII Посмотреть сообщение
BlackIce, а исходников родной функции не накопаете? Сравнить.
А какая родная ? Все, что накопал, опубликовал выше.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.08.2014, 15:55
Помогаю со студенческими работами здесь

Аналог kbhit
Подскажите пожалуйста, какую функцию необходимо использовать в С++, чтобы прога поняла, что нажата...

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

Kbhit выдает ошибку
Функция kbhit() или _kbhit() выдает ошибку при компиляции. Заголовочный файл <conio.h> стоит. Сама...

немогу разобратся с kbhit()
научите как kbhit() юзать? borland 3.1 если на пробел нажимаю(32) вроде нормально выполняет.. а...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru