Вот что за засада?
Sep. 26th, 2024 03:55 pmРешил было сэкономить объем text-секции в микроконтроллере и используемые по нескольку раз строковые константы объявить именно как константы. Однако, gcc, зараза такая, не хочет при компиляции в массив, использующий эти строки, подставить именно переменные, несмотря на то, что они - константы. Вот простой пример:
Выхлоп:
Однако, вот так прокатывает:
Ну, значит, придется делать массив указателей на указатели…
#include <stdio.h>
static const char * text1 = "One";
static const char * text2 = "Two";
static const char * text3 = "Three";
static const char * const array[3] = {text1, text2, text3};
int main(){
for(int i = 0; i < 3; ++i) printf("%d: %s\n", i, array[i]);
return 0;
}
Выхлоп:
gcc 2.c 2.c:7:39: ошибка: элемент инициализатора не является константой 7 | static const char * const array[3] = {text1, text2, text3}; | ^~~~~ 2.c:7:39: замечание: (где-то рядом с инициализацией для «array[0]») 2.c:7:46: ошибка: элемент инициализатора не является константой 7 | static const char * const array[3] = {text1, text2, text3}; | ^~~~~ 2.c:7:46: замечание: (где-то рядом с инициализацией для «array[1]») 2.c:7:53: ошибка: элемент инициализатора не является константой 7 | static const char * const array[3] = {text1, text2, text3}; | ^~~~~ 2.c:7:53: замечание: (где-то рядом с инициализацией для «array[2]»)
Однако, вот так прокатывает:
#include <stdio.h>
static const char * text1 = "One";
static const char * text2 = "Two";
static const char * text3 = "Three";
static const char ** const array[3] = {&text1, &text2, &text3};
int main(){
for(int i = 0; i < 3; ++i) printf("%d: %s\n", i, *array[i]);
return 0;
}
Ну, значит, придется делать массив указателей на указатели…