使用另一个函数中定义的变量

使用另一个函数中定义的变量

问题描述:

所以我试图控制一个游戏杆,使用API​​编写一些代码来这样做。 我读过的轴数使用ioctl(fd, JSIOCGAXES, &axes);,并希望再打印在事件处理函数(函数B)移动的轴在功能操纵杆:使用另一个函数中定义的变量

char whichaxis[axes] = {'X','Y','Y','X'}; 
printf("%c%c |%8hd\n",whichjs,whichaxis[jse.number],jse.value); 

此代码应打印的东西像LX| -32768,说左边的操纵杆已经在x方向上移动了。

但是,这会返回一个错误,因为我在函数b中调用axes,但它没有在函数b中定义。 所以我的问题是,我怎样才能使用axes,尽管它没有在函数b中定义?

下面是代码

// Returns info about the joystick device 
void print_device_info(int fd) { 
    int axes=0, buttons=0; 
    char name[128]; 
    ioctl(fd, JSIOCGAXES, &axes); 
    ioctl(fd, JSIOCGBUTTONS, &buttons); 
    ioctl(fd, JSIOCGNAME(sizeof(name)), &name); 
    printf("%s\n %d Axes %d Buttons\n", name, axes, buttons); 
} 

// Event handler 
void process_event(struct js_event jse) { 
    // Define which axis is which 
    //  Axis number {0,1,2,3} */ 
    char whichaxis[axes] = {'X','Y','Y','X'}; 
    //Define which joystick is moved 
    char whichjs = '*'; 
    switch(jse.number) { 
     case 0: case 1: 
      whichjs = 'L'; 
      break; 
     case 2: case 3: 
      whichjs = 'R'; 
      break; 
     default: 
      whichjs = '*'; 
      break; 
    } 
    // Print which joystick, axis and value of the joystick position 
    printf("%c%c |%8hd\n",whichjs,whichaxis[jse.number],jse.value); 
} 
+1

请张贴一些细节(函数定义和函数b)。 – doptimusprime

+1

在'printf(“%c%c |%8hd \ n”,whichjs,whichaxis,jse.value);''whichaxis'应该是'whichaxis [jse.number]'。 'whichaxis'是一个指针。 – doptimusprime

+0

好点 - 在代码中更改 – theoB610

axes是在函数内声明的局部变量。局部变量只能用于声明它的函数中。全局变量是在所有函数之外声明的变量。因此,使axes是一个全局变量,可用于所有功能。

int axes; // Global declaration makes axes which as scope in all below functions 

void print_device_info(int fd) { 
    ... 
    ioctl(fd, JSIOCGAXES, &axes); 
    ... 

void process_event(struct js_event jse) { 
    char whichaxis[axes] = {'X','Y','Y','X'}; 
    ... 
+0

怎么样?从逻辑上讲,在函数print_device_info()中的设备信息函数 – theoB610

+0

@ theoB610'int axes'中定义它是有意义的,它使得变量有效并且可以在该函数中使用。如果这被声明为全局的,它可以在多个范围内访问。 –

要么,可以使用全局变量axes或传递轴在两个或功能中的一个的参数。

如果无法将其作为参数传递(因为它是回调函数),则可以使诸如GetAxes()之类的函数为当前轴或使用全局变量。

+0

我想说使用一个全局或非常量指针轴,所以你可以修改它。 –

+0

^我该怎么做(使用指针方法)? – theoB610

+0

另外,如何将轴作为参数传递? – theoB610