2

还使用 -Wall 和 -std=c99 和 c11 进行了测试(当然不工作)

$ gcc -o usb -L/usr/local/lib -lusb-1.0 -I/usr/local/include usbtest.c

输出:

usbtest.c: In function ‘main’:
usbtest.c:14:1: error: label ‘brd_ftdi’ used but not defined
 libusb_get_device_list(context, &&brd_ftdi);

usbtest.c:

#include <stdio.h>
#include <libusb-1.0/libusb.h>
int main() {
  libusb_device* brd_ftdi;
  libusb_device_handle** brd_ftdi_handle;
  libusb_context* context;

  //libusb_device *** list = &&brd_ftdi;

  //libusb_init (libusb_context **);
  libusb_init (&context);

  libusb_get_device_list(context, &&brd_ftdi);
  //libusb_open(brd_ftdi, brd_ftdi_handle);

  //libusb_exit(struct libusb_context *); 
  libusb_exit(context);

  return 0;
}

没有定义的?我知道,但libusb_get_device_list()应该这样做(把清单放在那里),所以WTF?我还测试了声明一个指向指针的指针brd_ftdi并将其传递给它,但结果相同。

4

1 回答 1

2

如果您仔细阅读错误消息,它会说未定义标签 brd_ftdi,而不是变量。

那是因为你写&&brd_ftdi&&是 GCC 扩展,表示标签的地址。这不是标准 C.

变量的地址只是一个&brd_ftdi变量的地址是&brd_ftdi

libusb_get_device_list函数需要一个libusb_device***: 它将指针列表的地址写入的地址libusb_device。你可以像这样使用它:

libusb_device **list_of_devices;
libusb_get_device_list(context, &list_of_devices);

list_of_devices是指向列表的第一个指针(指向libusb_devices 的指针)的指针。

您当前对 的注释调用会遇到问题libusb_open,因为您将未初始化的指针传递给指向 的指针libusb_device_handle。该函数也将其结果 (the libusb_device_handle *) 写入您提供的地址。

于 2015-02-05T12:15:01.980 回答