|
|
  |
Объявление массива без указания размера, и sizeof() |
|
|
|
Feb 21 2014, 13:20
|

Гуру
     
Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514

|
Добрый день! Что-то не соображу... Есть массив, находится во флеш. Реально здоровый, количество элементов считать руками ну просто лень. Объявлен (соответственно, в хидере и в с-файле) так Код extern const unsigned char my_array[];
const unsigned char my_array[] = { /* здесь через запятую элементы массива */ }; при обращении к массиву никаких проблем, но вызов sizeof(my_array) вводит компилятор в ступор: Код test\test.c(41): error: #70: incomplete type is not allowed в чем проблема?
|
|
|
|
|
Feb 21 2014, 13:43
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
сделайте в том же файле, где он определен, еще и константу, int arr_size = ARRAY_SIZE(array); и ее тоже как extern потом берите. (про кейл не знаю, это методом тыка, сработает или нет, возможно, это расширение gnu, не уверен, что стандарт) По крайней мере в линуксе такое налево и направо практикуется: Код static struct v4l2_input tvp5146_inputs[] = { { .index = 0, .name = "Composite", .type = V4L2_INPUT_TYPE_CAMERA, .std = TVP514X_STD_ALL, }, { .index = 1, .name = "S-Video", .type = V4L2_INPUT_TYPE_CAMERA, .std = TVP514X_STD_ALL, }, };
static struct vpfe_subdev_info vpfe_sub_devs[] = { { .name = "tvp5146", .grp_id = 0, .num_inputs = ARRAY_SIZE(tvp5146_inputs), главное, в одном файле чтобы это было - и инициализация, и ARRAY_SIZE
|
|
|
|
|
Feb 21 2014, 14:31
|

Гуру
     
Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514

|
Цитата(Сергей Борщ @ Feb 21 2014, 18:11)  Чем не устроила ... тем, что в Keil не работает. когда объявил константу, причем после объявления массива, то все в порядке. До объявления массива - не работает Но теперь все нормально, SM, спасибо итого, хидер: Код #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0])) extern const unsigned char my_array[]; extern const unsigned int MY_ARRAY_SIZE; с-файл Код const unsigned char my_array[] = { ... };
// Объявление после массива const unsigned int MY_ARRAY_SIZE = ARRAY_SIZE(my_array);
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|