Vamos a ver, no puedes hacer:
char tabla[][]=
{
{"xxx", "xxxx", 0xFF},
has definido tabla como un array de arrays de chars, por lo tanto si el último índice le usas para cadenas, quiere decir que tienes un array de cadenas, por lo que lo expresas así:
char * tabla[]={"holaaa","adios","tal"};
Pero nada de hacer múltiples {} (eso sería si quisieses definir cada cadena con su correspondientes letras una a una). Y sobre los arrays multidimensionales, no se pueden definir sin el índice. En realidad [][] significa * [], o sea array de punteros.
Sobre el uso de [], es simplemente para declarar arrays que no se sabe que tamaño tienen y lo calcula el propio compilador, pero sólo si es de 1 nivel... Se supone que sabrás el máximo de las variables, lo que puede variar es el número de ellas. Ejemplo:
Código:
char tabla[][50]=
{
"holaaa",
"adios",
"tal",
{'o', 't', 'r', 'a'}
};