当前位置: 代码迷 >> C语言 >> 从保留字interrupt到形参数目可变函数的讨论
  详细解决方案

从保留字interrupt到形参数目可变函数的讨论

热度:265   发布时间:2006-06-04 09:04:00.0

我不想再回答这问题,你自己google,当版主不能自满,对就是对,错就是错.


----------------解决方案--------------------------------------------------------
回复:(baidu)[QUOTE]baidu删除帖子《本帖子为回复帖...
以下是引用baidu在2006-6-4 9:02:00的发言:
baidu删除帖子《本帖子为回复帖子》,原因:以偏概全,只会搅乱初学者视线,没有对用户进行分值操作


非常可笑的举止

还是那句话,不搞争论。

毕竟DOS系统调用、bios中断时代已经过去了……

其实我也怀念Turboc C呀,很精致的小玩意儿

一本Turboc C实用大全仍珍藏怀中。

曾经那么钟爱C与asm混合编程……


----------------解决方案--------------------------------------------------------
/*查阅了一下
http://www.bc-cn.net/bbs/dispbbs.asp?boardID=5&ID=67854&page=2
有这么一篇东西
函数指针概念求定积分(复化Simpson法)*/
#include<stdio.h>
#include<math.h>
double f1(double x)/*f1(x)是被积函数1*/
{
return 1/(1+x*x);
}
double f2(double x)/*f2(x)是被积函数2*/
{
return sin(x);
}
double Simp(double a,double b,double (*fun)())
/*形参b,a是积分的上下限,函数指针fun指向被积函数*/
{
#define NUM 100 //越大越精
double Simp=0,dx=(b-a)/NUM;
int i;
double x1=a,x2=a+dx;
for(i=0;i<NUM;i++,x1=x2,x2+=dx)
Simp+=(fun(x1)+4*fun((x1+x2)/2)+fun(x2))/6*dx;
return Simp;
}
main()
{
/*用复化辛卜生法分别计算下列定积分
1 π
∫1/(1+x^2)dx ∫sin(x)dx
0 0
*/
double Pi=3.1415926535898;
printf("第一个定积分≈%lf\n",Simp(0,1,f1));
printf("第二个定积分≈%lf\n",Simp(0,Pi,f2));
}

----------------解决方案--------------------------------------------------------
现在是不是觉得自己错了?
错了,都错得不认得13楼了。
----------------解决方案--------------------------------------------------------
噢?不删了?
----------------解决方案--------------------------------------------------------
不删了?那我就走了
----------------解决方案--------------------------------------------------------

9楼南大版主 你好!
void interrupt (* _Cdecl gtvect(int interruptno)) ();
这是在TC2.0编写的工控程序中取来的一条语句,这是一条函数原型声明语句,在TC2.0中能编译通过.

我现在是不明白具体意思,函数返回值是void,()是代表没有形参吗?函数名又是什么呢?


----------------解决方案--------------------------------------------------------

1.保留字interrupt指示函数是一个中断处理函数。在调用中断处理函数的时候,所有的寄存器将会被保存。中断处理函数的返回时的指令是iret,而不是一般函数用到的ret指令。
2.getvect()根据中断号interruptno获取中断号为interruptno的中断处理函数的入口地址。

3.此函数原型声明在dos.h 180行

4.我想大既不会再有人删了这个贴子了
5.给个示例

#include "stdio.h"
#include "conio.h"
typedef void (*F)();

void fun();
void fun1();
F fun2(int i);


F (* TT(int i) )();
main()
{
TT(3)();
TT(1)();

}
void fun()
{
printf("This is fun.");

}
void fun1()
{
printf("This is fun1.");

}

F fun2(int i)
{
if(i==1)return fun;
else return fun1;
}
F (* TT(int i) )()
{
return (F (*)())fun2(i);
}


----------------解决方案--------------------------------------------------------
以下是引用一叶知秋在2006-6-4 19:51:00的发言:

9楼南大版主 你好!
void interrupt (* _Cdecl getvect(int interruptno)) ();
这是在TC2.0编写的工控程序中取来的一条语句,这是一条函数原型声明语句,在TC2.0中能编译通过.

我现在是不明白具体意思,函数返回值是void,()是代表没有形参吗?函数名又是什么呢?

[回复]
1。老版主feng1256在3楼已经精炼地回答了你的主要疑问。遗憾的是,包括你在内的不少求教者似乎不够尊重他人辛辛苦苦为尔等撰写的回帖。
2。void interrupt (* _Cdecl getvect(int interruptno)) ();是TC编译器在头文件dos.h中列出的一个函数原型,函数名叫做gtvect,意思是“取中断向量”。该函数有1个形参,即
interruptno,意为“中断号”。由于“中断向量”是地址,所以该函数返回类型是指针
3。用什么来承接
getvect( interruptno )的返回值呢?请查阅一下Turbo C实用大全第363页所举的例子。

[此贴子已经被作者于2006-6-5 7:29:04编辑过]


----------------解决方案--------------------------------------------------------
  相关解决方案