Это пример кода, с которым я имею дело.
switch(n){
case 1:
char tcol[4][100]={"Canadian Order","Achat Francais","china"};
char trow[7][100]={"Item","Price","Qty","Total","Tax","Grand total"};
Htable(trow,tcol,7,4,"");
break;
case 2:
char tcol[3][100]={"Other column 1","2nd column"};
char trow[4][100]={"1st row","2nd row","Row 3"};
Htable(trow,tcol,4,3,"");
break;
case n:
...
}
По сути, я создаю функцию Htable, которая принимает имена строк и столбцов для таблицы HTML, а 3-й и 4-й аргументыколичество строк и столбцов.
Проблема, с которой я столкнулся, заключается в том, что компилятор считает, что я переопределяю массив, хотя каждое определение доступно только один раз из ветви коммутатора.Вот ошибки:
./html2.c:118: error: redefinition of ‘tcol’
./html2.c:110: error: previous definition of ‘tcol’ was here
./html2.c:119: error: conflicting types for ‘trow’
./html2.c:111: error: previous declaration of ‘trow’ was here
И это происходит для каждого блока кода, который у меня есть.Единственное частичное решение, которое я могу придумать, заключается в следующем:
char tcol[1][4][100]={"Canadian Order","Achat Francais","china"};
char trow[1][7][100]={"Item","Price","Qty","Total","Tax","Grand total"};
char trow[2][4][100]={"1st row","2nd row","Row 3"};
char tcol[2][4][100]={"Other column 1","2nd column"};
switch(n){
case 1:
Htable(trow[1],tcol[1],7,4,"");
break;
case 2:
Htable(trow[2],tcol[2],4,3,"");
break;
case n:
...
}
Есть ли простой способ сделать это, когда компилятор C принимает его, не добавляя причудливый код для разделения строк?