Eu não gostei de nenhuma dessas respostas, então criei as minhas. Não sei se isso é ANSI C ou não, é apenas o GCC 4.2.1 no modo padrão. Como nunca me lembro do bracketing, começo com um subconjunto dos meus dados e luto com as mensagens de erro do compilador até que ele seja encerrado. A legibilidade é minha primeira prioridade.
// in a header:
typedef unsigned char uchar;
struct fields {
uchar num;
uchar lbl[35];
};
// in an actual c file (I have 2 in this case)
struct fields labels[] = {
{0,"Package"},
{1,"Version"},
{2,"Apport"},
{3,"Architecture"},
{4,"Bugs"},
{5,"Description-md5"},
{6,"Essential"},
{7,"Filename"},
{8,"Ghc-Package"},
{9,"Gstreamer-Version"},
{10,"Homepage"},
{11,"Installed-Size"},
{12,"MD5sum"},
{13,"Maintainer"},
{14,"Modaliases"},
{15,"Multi-Arch"},
{16,"Npp-Description"},
{17,"Npp-File"},
{18,"Npp-Name"},
{19,"Origin"}
};
Os dados podem iniciar a vida como um arquivo delimitado por tabulação que você substitui para massagear outra coisa. Sim, isso é material do Debian. Portanto, um par externo de {} (indicando a matriz) e outro par para cada estrutura interna. Com vírgulas entre. Colocar as coisas em um cabeçalho não é estritamente necessário, mas eu tenho cerca de 50 itens na minha estrutura, então eu os quero em um arquivo separado, para manter a bagunça fora do meu código e para facilitar a substituição.