And I agree with David that, in generic, C99 initializers is the way to go. However, the higher level point remains:

PCI IDs, and data like them, are fundamentally not C code.

I'm a strong believer in putting data in its most natural form, and then transforming it via automated tools into the desired form. C code is a natural form of data that describes "process and procedure", and the compiler is the automated tool that transforms it. PCI ID tables are data that is not process/procedure, but instead much more of a traditional data table. So it should be a form more suitable for its multiple uses. Distro installers and other utilities already pay attention to the PCI ID tables in drivers. Why are we compiling non-code into ELF .o objects, and then forcing people to extract that non-code from .o files? In the South we call it "going around your elbow to get to your thumb" :)