Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
scherbakovss201
15 / 6 / 16
Регистрация: 22.12.2015
Сообщений: 1,569
#1

Multiple declaration for 'oldHotkey'

21.09.2016, 20:13. Просмотров 195. Ответов 7
Метки нет (Все метки)

Multiple declaration for 'oldHotkey'

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include < dos.h >
#include < conio.h >
#include < stdio.h >
void interrupt far (*oldKeyHandler)(...);//Blocked f6
void interrupt far (*oldHotkey)(...);//fiLter shift+alt+f
 
unsigned char  SCAN_F6= 64;
unsigned char  SCAN_Shift= 16;
unsigned char  SCAN_ALT= 12;
unsigned char  SCAN_f= 102;
int keycount=1;//count shift+alt+f
/////////////////////////////////////////////////////////////////////////////////
 
void interrupt far keyHandler(...) {
char key = inport(0x60);
 
//blocked f6
if ((key==SCAN_F6) &&  (keycount%2)==0)
{
char ctr = inport(0x61);
outport(0x61, ctr | 0x80);
outport(0x61, ctr);
outport(0x20, 0x20);
printf("key F6 is blocked.");
textattr(0x0f);
} else oldKeyHandler();
}
//////////////////////////////////////////////////////////////////////
 
void interrupt far oldHotkey(...) 
{
char key = inport(0x60);
if (key==SCAN_Shift) &&(key==SCAN_ALT)&& (key==SCAN_f){
keycount=keycount+1;
}
}
 
/////////////////////////////////////////////////////////////////////////////
int main() {
 
clrscr();
textattr(0x0a);
cprintf(" ");
cprintf(" Laboratorna rabota #2");
cprintf(" ");
cprintf(" Control keyboard");
cprintf(" ");
 
textattr(0x0c);
cprintf("\n\n\r"hot" combination: "); textattr(0x0a);
cprintf(" Shift+Alt+f\n\r"); 
textattr(0x0b);
 
 
oldKeyHandler = getvect(0x09);
setvect(0x09, keyHandler);
oldHotkey = getvect(0x09);
setvect(0x09, oldHotkey);
char c;
 
do {
c = getch();
if (c==0)
 {printf("*");
c=getch();
}
 
printf("\t%c : %u\n", c, (unsigned int)c);
} 
 
while(c!=27);
return 0;
}
Чего он не принимает мою функцию,если oldKeyHandler принял?

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.09.2016, 20:13
Ответы с готовыми решениями:

Multiple declaration for
Есть header: #define SNAME 10 //------------------------ typedef struct...

Ошибки: "Declaration missing" и "Declaration syntax error"
typedef struct Node{ pacient value; //ошибка тут struct Node *next; }NODE,...

Ошибка Multiple markers at this line
f.h #ifndef FOO #define FOO typedef struct _foo foo; #endif

Coocox. multiple definition. Переменная объявлена в *.c
Давно заметил это глюк в кокосе, но обычно просто не создавать в разных сорцах...

Too many types in declaration
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; void textfile(int, FILE*); void...

7
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4389 / 2364 / 656
Регистрация: 18.10.2014
Сообщений: 4,008
22.09.2016, 00:21 #2
Цитата Сообщение от scherbakovss201 Посмотреть сообщение
Чего он не принимает мою функцию,если oldKeyHandler принял?
У вас в программе объявлена переменная-указатель

C
1
void interrupt far (*oldHotkey)(...);
а также функция с таким же именем

C
1
void interrupt far oldHotkey(...)
Неудивительно, что получилось multiple declaration.

Для oldKeyHandler такого конфликта нет.
1
scherbakovss201
15 / 6 / 16
Регистрация: 22.12.2015
Сообщений: 1,569
22.09.2016, 12:24  [ТС] #3
Так как правильно мне ее объявить и описать?
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4389 / 2364 / 656
Регистрация: 18.10.2014
Сообщений: 4,008
22.09.2016, 17:55 #4
Цитата Сообщение от scherbakovss201 Посмотреть сообщение
Так как правильно мне ее объявить и описать?
Кого "ее"? Переменную или функцию? Для того, чтобы ответить на вопрос "как правильно", надо знать, что вы хотите сделать. Я не знаю, что именно вы хотите сделать.

Вы же сами сказали, что с oldKeyHandler все нормально. Сделайте так же с oldHotkey...
0
scherbakovss201
15 / 6 / 16
Регистрация: 22.12.2015
Сообщений: 1,569
22.09.2016, 18:50  [ТС] #5
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Вы же сами сказали, что с oldKeyHandler все нормально. Сделайте так же с oldHotkey...
а в чем между ними разница в написании?оба void interrupt far Name(...)
по моему все одинаково.
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4389 / 2364 / 656
Регистрация: 18.10.2014
Сообщений: 4,008
22.09.2016, 20:36 #6
Цитата Сообщение от scherbakovss201 Посмотреть сообщение
по моему все одинаково.
Для oldKeyHandler у вас объявлены:

- переменная-указатель oldKeyHandler
- функция keyHandler

Посмотрите внимательно на имя переменной и имя функции. Вы замечаете, что в этом случае имя переменной и имя функции отличаются? Конфликта имен нет, все компилируется нормально.

Теперь возвращаемся к oldHotKey. Для oldHotKey у вас объявлены:

- переменная-указатель oldHotKey
- функция oldHotKey

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

Так понятнее? Почему вы использовали одно и то же имя и для функции, и для переменной в последнем случае???
0
scherbakovss201
15 / 6 / 16
Регистрация: 22.12.2015
Сообщений: 1,569
22.09.2016, 21:19  [ТС] #7
да old в описании функции не пишется только в объявлении(после инклайдов).
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4389 / 2364 / 656
Регистрация: 18.10.2014
Сообщений: 4,008
22.09.2016, 21:25 #8
Цитата Сообщение от scherbakovss201 Посмотреть сообщение
да old в описании функции не пишется только в объявлении(после инклайдов).
Я не понимаю, что вы этим хотите сказать.

Еще раз: ваши old... в самом начале файла - это не функции вообще. Это переменные-указатели. И, судя по тому как они используются дальше, именно указателями они и должны быть. К вашим функциям, определенным ниже, эти переменные не имеют никакого отношения вообще.
0
22.09.2016, 21:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.09.2016, 21:25

Функции: declaration terminated incorrectly
Добрый день, начал самостоятельное изучение Си, и в разделе с функциями...

'printf' cannot start a parameter declaration
Здравствуйте. Помогите разобраться с ошибками: #include &lt;stdio.h&gt; int main...

Не работает функция: Cannot start a parameter declaration
#include&lt;stdlib&gt; #include&lt;stdio.h&gt; #include&lt;conio.h&gt; struct ob { int...


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

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

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