Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
OrkVasya
о_____О
Эксперт 1С
218 / 218 / 34
Регистрация: 19.11.2010
Сообщений: 1,056
Завершенные тесты: 1
#1

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

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

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

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

Ошибка kbhit() - C++
Добрый день, подскажите пожалуйста. При сборке программы выдаёт такую ошибку Ошибка 1 error C4996: 'kbhit': The POSIX name for this...

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

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

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

альтернатива kbhit() и getch - C++
А кто подскажет,чем можно заменить kbhit() and getch в коде. Компилятор выдает ошибку,т.к. данные ф-ции устаревшие int i=0; enum...

6
BlackIce
310 / 172 / 64
Регистрация: 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
OrkVasya
о_____О
Эксперт 1С
218 / 218 / 34
Регистрация: 19.11.2010
Сообщений: 1,056
Завершенные тесты: 1
19.08.2014, 15:40  [ТС] #3
Прикольно, спасибо.
0
SatanaXIII
Супер-модератор
Эксперт С++
5618 / 2653 / 246
Регистрация: 01.11.2011
Сообщений: 6,549
Завершенные тесты: 1
19.08.2014, 15:42 #4
Цитата Сообщение от OrkVasya Посмотреть сообщение
А функционально чем они отличаются?
А вы найдите исходники да поглядите.
Цитата Сообщение от OrkVasya Посмотреть сообщение
Везде (на msdn, как минимум) пишут пользовать _kbhit() и что при этом происходит
И что при этом происходит? Чего пишут?


Ну а на самом деле, функции, начинающиеся с нижнего подчеркивания, обычно это чисто майкрософтовские поделки. Что они там внутрь засунули неизвестно. Что оно делает можно поглядеть в любом справочнике, а вот как оно это делает - таинство.
По этому на msdn и пишут про _kbhit, что впринципе логично: во-первых они свои плюшки продвигают, а во-вторых может быть там какая-либо оптимизация с остальными студийными плюшками задествована.
В общем, как подытог, если не планируете переносить свои проекты на другие компиляторы (если не хотите, чтобы ваш код запустился у того, кого вы к примеру попросили помощи, а у него не стоит студия, и вы обломаетесь) и густо используете прочие остальные исконно студийные функции, то пользуйтесь _kbhit и не парьтесь. В противном случае используйте функцию не начинающуюся с подчеркивания.
Конкретнее, о преимуществах той или иной реализации, можно будет разговаривать только видя собственно реализацию.
1
BlackIce
310 / 172 / 64
Регистрация: 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
SatanaXIII
Супер-модератор
Эксперт С++
5618 / 2653 / 246
Регистрация: 01.11.2011
Сообщений: 6,549
Завершенные тесты: 1
19.08.2014, 15:47 #6
Цитата Сообщение от BlackIce Посмотреть сообщение
компилятор тупо заменил устаревшее название новым
Во. Я так и думал.
BlackIce, а исходников родной функции не накопаете? Сравнить.
0
BlackIce
310 / 172 / 64
Регистрация: 18.01.2014
Сообщений: 387
19.08.2014, 15:55 #7
Цитата Сообщение от SatanaXIII Посмотреть сообщение
компилятор тупо заменил устаревшее название новым
Нет, в ассемблерном листинге не заменяет, я ошибся, просто в асм добавляется знак подчеркивания:

kbhit -> _kbhit
_kbhit -> __kbhit

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

Цитата Сообщение от SatanaXIII Посмотреть сообщение
BlackIce, а исходников родной функции не накопаете? Сравнить.
А какая родная ? Все, что накопал, опубликовал выше.
0
19.08.2014, 15:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.08.2014, 15:55
Привет! Вот еще темы с ответами:

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

Работа с while, kbhit() и getch() - C++
Здравствуйте! Подскажите пожалуйста, Задача, сделать точку в консоли, которая бы двигалась в заданном направление и меняла его при...

Очистка буфера kbhit() - C++
Доброго времени суток! Вопрос в следующем. Как очистить буфер функции kbhit? Код такого рода: while (exit==0) { if...

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru