使用另一个函数中定义的变量
所以我试图控制一个游戏杆,使用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);
}
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'};
...
怎么样?从逻辑上讲,在函数print_device_info()中的设备信息函数 – theoB610
@ theoB610'int axes'中定义它是有意义的,它使得变量有效并且可以在该函数中使用。如果这被声明为全局的,它可以在多个范围内访问。 –
请张贴一些细节(函数定义和函数b)。 – doptimusprime
在'printf(“%c%c |%8hd \ n”,whichjs,whichaxis,jse.value);''whichaxis'应该是'whichaxis [jse.number]'。 'whichaxis'是一个指针。 – doptimusprime
好点 - 在代码中更改 – theoB610