请用C语言的函数指针变量,对manage_device函数进行改造,完成下面C语言代码中的(1)、(2)、(3)和(4)处的变量说明或语句,将解答填入对应栏内。 【C语言代码】 /*变量与类型说明*/ #include "stdio.h"

admin2009-02-01  37

问题 请用C语言的函数指针变量,对manage_device函数进行改造,完成下面C语言代码中的(1)、(2)、(3)和(4)处的变量说明或语句,将解答填入对应栏内。
【C语言代码】
   /*变量与类型说明*/
   #include  "stdio.h"
   #include  "stdlib.h"
   extern int  sys_status;
   extern int Dev_drv1(int arg1, int arg2);
   extern int Dev_drv2(int arg1, iht arg2);
   extern int Dev_drv3(int arg1, int arg2);
   extern int Dev_drv4(int arg1, int arg2);
   #define  NOERROR  0
   typedef struct {
   int  _fd;
    (1) 函数指针变量说明;/* 变量名用process */
   } TYP_DEV_TAB;
   TYP_DEV_TAB  dev_tab[50]= {{101, Dev_drv1},{99, Dev_drv2},
   {80, Dev_drv3},{120, Dev_dry4},};
   /* 程序 */
   void  manage_device(int devid, int arg1, int arg2)
   {  iht  place ;
      int  ret;
    (2) 函数指针变量说明;/*局部变量,变量名用ProcAction */
       for(place=0 ; place<50 ; place++)   {
          if(dev_tab [place]._fd == devid)  {
    (3) 语句1;/* 变量名胜ProcAction, 得到具体函数的入口地址 */
              break;
          }
      }
      if(place>=50)
        printf("NO DEVICE  fd = %d\n",devid);
        (4) 语句2;
      if(ret!=NOERROR)
        printf("DEVICE  %d  error!", devid);
   }
在C语言程序中,常在某些变量的说明前加extem,如本题在变量说明中的第一条加extem int sys_stams;请说明加extem与不加extem的区别,在进行编译时会有什么样的不同处理?

选项

答案[*]

解析 本题考查对C语言的变量声明类型的理解。在变量声明前加extem,表明为引用一个外部变量,是外部变量引用声明,不管该变量在程序的什么位置。如果在一个文件中要引用在另一文件中定义的全局变量,就应在变量声明前加extem。
   如果在一个全局变量前不加extem,表明该变量是在本文件中定义的一个全局变量,同时可被其他文件作为外部变量引用。
   在不加extem外部变量的定义处,编译时要给变量分配地址空间。在加extem外部变量引用声明处,不给变量分配地址。
   值得注意的是,如果在全局变量的声明前都加extem,在这种情况下,编译连接时会确定一处分配一次地址空间。
转载请注明原文地址:https://kaotiyun.com/show/mmWZ777K
0

最新回复(0)