阅读:1421回复:4
问打印驱动代码含义,请大侠指教
问打印驱动代码含义,请大侠指教
int lpt_sel_prn_method(int id, int color, int media, int quality) { static int (*inst[])(int, int, int, int) = { lpt_sel_prn_method3, lpt_sel_prn_method1 }; return (*inst[id != 3])(id, color, media, quality); } |
|
沙发#
发布于:2005-01-04 08:31
根据id值判断是调用lpt_sel_prn_method3函数,还是调用lpt_sel_prn_method,
这里使用了指针函数数组inst[] |
|
|
板凳#
发布于:2005-01-04 08:58
(*inst[])(int, int, int, int)这个函数看不懂,(*inst[])是函数名吗,后面的是它的参数?
另外怎么来通过id值来判断调用方法的,这句话return (*inst[id != 3])(id, color, media, quality);能否给详细解释一下?谢谢 |
|
地板#
发布于:2005-01-11 14:34
(*inst[])(int, int, int, int)
这是个函数指针数组,inst是数组名,(int, int, int, int)是指针所指向的函数的参数形式,而lpt_sel_prn_method3,lpt_sel_prn_method1才是具体的函数名。 至于通过ID判断则在id != 3这里,也就是说当ID等于3时,该表达式为0,则执行inst[0]指针所指向的函数,否则执行其它。 我这里也不是很清楚,就是按原码中应该是在id!=3时执行inst[1],但我记得id!=3该表达式有0或非零,但非0不一定是1呀。 |
|
|
地下室#
发布于:2005-01-12 18:00
c语言里布尔表达式的值就是0和1
其他情况下“非0既真”的情况才适用的 |
|