看不懂源码真的好痛苦呀,请大哥帮忙解释一下,我是一个初学c者

flybat 2003-08-30 05:08:49



#include <stdio.h>
#include <dos.h>
#include <conio.h>

#define VK_ESC 0x11b
#define TIMER 0x1c

#define d //定义这个d有什么呀

int TimerCounter=0;

void interrupt(*oldhandler)(d); // 这些d有什么函义

void interrupt newhandler(d)
{
TimerCounter++;
oldhandler();
}
void SetTimer(void interrupt (*IntProc)(d))
{
oldhandler=getvect(TIMER);
disable();
setvect(TIMER,IntProc);
enable();
}
void KillTimer()
{
disable();
setvect(TIMER,oldhandler);
enable();
}
void main(void)
{
int key,time=0;
SetTimer(newhandler);
for(;;)
{
if(bioskey(1))
{
key=bioskey(0);
if(key==VK_ESC)
{
printf("user\n");
break;
}
}
if(TimerCounter>18)
{
TimerCounter=0;
time++;
printf("%d\n",time);
if(time==10)
{
printf("program\n");
break;
}
}
}
KillTimer();
}
...全文
261 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
kuangjingbo 2003-08-31
  • 打赏
  • 举报
回复
关注
flinming 2003-08-31
  • 打赏
  • 举报
回复
up
dddd8888 2003-08-31
  • 打赏
  • 举报
回复
# deifine d 10
nmgpy 2003-08-30
  • 打赏
  • 举报
回复
请教各位void interrupt(*oldhandler)(d);
是什么意思?
Wanix 2003-08-30
  • 打赏
  • 举报
回复
d 在这里没用!!!!
19830711 2003-08-30
  • 打赏
  • 举报
回复
no
idontlikenickname 2003-08-30
  • 打赏
  • 举报
回复


这个程序原来应该是用C++写的~
在C++里#define d这句的完整形式应该是:
#ifdef _cplusplus
#define d ... // 如果是C++程序就用...替代d
#else
#define d // 如果是C程序,d就是一个空定义,没有用
#endif
因为在C++程序中interrupt类型的函数需要的是变参数,比如:
void interrupt newhandler(...)
{
TimerCounter++;
oldhandler();
}
现在这么写估计是写这个程序的人在参考了C++的程序后不知道在C下可以不再定义d~~,
也就是说函数直接写成这样就行了:
void interrupt newhandler()
{
TimerCounter++;
oldhandler();
}

Wanix 2003-08-30
  • 打赏
  • 举报
回复
d 没用!
sandrowjw 2003-08-30
  • 打赏
  • 举报
回复
#define d //定义这个d有什么呀
中断的参数类型列表,应付可能的参数变化,现在是没有参数
void interrupt(*oldhandler)(d);
获取旧的中断向量

这是一个替换时间中断的程序,功能就是计数。

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧