У меня есть 2, один со строкой и один с номером. Как я могу создать массив const из определения с строкой и номером. Также есть дополнительная константа, которая должна быть в этом массиве.C char string для массива
Как я могу написать этот код, чтобы иметь 0x22, 0x41, 0x42, 0x42, 0x21 в массиве foobar, из определений FOO и BAR?
#define FOO "AB"
#define BAR 33
extern int rs232_write(const unsigned char *data, unsigned char count);
const unsigned char foobar[] =
{
0x22,
FOO[0], /*what must i put here, this do not work*/
FOO[1],
0x42,
BAR,
};
int main(void)
{
rs232_write(foobar,sizeof(foobar));
return 1;
}
В НКУ, к примеру, я получаю сообщение об ошибке:
./001.c:9:5: error: initializer element is not constant
FOO[0], /*what must i put here*/
^
Строка всегда иметь одинаковую длину. я также попробовать наоборот:
#define FOO "AB"
#define BAR 33
extern int rs232_write(const unsigned char *data, unsigned char count);
const char foobar[] = \
"\x22" \
FOO \
"\x42" \
BAR /*what must i put here, this also not work*/
int main(void)
{
rs232_write(foobar,sizeof(foobar));
return 1;
}
Здесь я получаю также ошибки, например, GCC принтами:
./002.c:2:13: error: expected ‘,’ or ‘;’ before numeric constant
#define BAR 33
^
Я работаю на микроконтроллере с не так много места, поэтому я бы чтобы избежать создания массива во время выполнения, и мой компилятор поддерживает только C89.
Что не так с кодом вы показать нам? –
См. Комментарий, компилятор не принимает его (также пытался с gcc), «ошибка: элемент инициализации не является константой» и «error: expected», «or»; «перед числовой константой» – 12431234123412341234123
При публикации вопросов о ошибках сборки, всегда включают точные ошибки (в неотредактированной и немодифицированной и, самое главное, полной * форме) в теле вопроса. Предпочтительно прямая копия пасты полного журнала построения. –