windows: Silence zero-sized array warning in libusb.h for msvc Silence "nonstandard extension used : zero-sized array in struct/union" (C4200) warning caused by use of ZERO_SIZED_ARRAY in structures defined in libusb.h when compiling with msvc. A libusb user including the header from a c++ file is more likely to be annoyed by the warning because it is activated at level 2 as opposed to being included from a C file, where it's not activated until level 4. (on msvc, level 4 is the last step before -Wall). This causes problems when you also enable -Werror for your own source, since the libusb header just gets merged into the compilation unit. 9>hotplugtest.c 9>C:\src\libusb\libusb\libusb.h(786,11): error C2220: the following warning is treated as an error 9>C:\src\libusb\libusb\libusb.h(786,11): error C2220: uint8_t dev_capability_data[ZERO_SIZED_ARRAY]; 9>C:\src\libusb\libusb\libusb.h(786,11): error C2220: ^ 9>C:\src\libusb\libusb\libusb.h(786,11): warning C4200: nonstandard extension used: zero-sized array in struct/union 9>C:\src\libusb\libusb\libusb.h(786,11): warning C4200: uint8_t dev_capability_data[ZERO_SIZED_ARRAY]; 9>C:\src\libusb\libusb\libusb.h(786,11): warning C4200: ^ 9>C:\src\libusb\libusb\libusb.h(811,47): warning C4200: nonstandard extension used: zero-sized array in struct/union 5>C:\src\libusb\libusb\libusb.h(811,47): warning C4200: struct libusb_bos_dev_capability_descriptor *dev_capability[ZERO_SIZED_ARRAY]; 5>C:\src\libusb\libusb\libusb.h(811,47): warning C4200: ^ 9>C:\src\libusb\libusb\libusb.h(1284,38): warning C4200: nonstandard extension used: zero-sized array in struct/union 9>C:\src\libusb\libusb\libusb.h(1284,38): warning C4200: struct libusb_iso_packet_descriptor iso_packet_desc[ZERO_SIZED_ARRAY]; 9>C:\src\libusb\libusb\libusb.h(1284,38): warning C4200: ^ 9>Done building project "hotplugtest.vcxproj" -- FAILED. Closes #1112
diff --git a/libusb/libusb.h b/libusb/libusb.h index 61cacc9..2592ea7 100644 --- a/libusb/libusb.h +++ b/libusb/libusb.h
@@ -26,6 +26,9 @@ #define LIBUSB_H #if defined(_MSC_VER) +#pragma warning(push) +/* Disable: warning C4200: nonstandard extension used : zero-sized array in struct/union */ +#pragma warning(disable:4200) /* on MS environments, the inline keyword is available in C++ only */ #if !defined(__cplusplus) #define inline __inline @@ -2128,6 +2131,10 @@ int LIBUSB_CALL libusb_set_option(libusb_context *ctx, enum libusb_option option, ...); +#ifdef _MSC_VER +#pragma warning(pop) +#endif + #if defined(__cplusplus) } #endif