Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: непонятки с массивами.
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
-Игорь-
Что-то не понимаю в чем проблема.
В циклах заполняю один и тот же массив разными значениями. Один цикл компилится с предупреждением, что индекс выходит за пределы массива.
Первый случай:
Код
      for (int n=ADC_FIRST;n<ADC_SECOND;n++)
        {

здесь делаю всякие вещи, последним действием кидаю значения в массив

          dac1_array[n-ADC_FIRST]=adc_array[n-FILTER_COUNT];
        }

"-ADC_FIRST" - убираю смещение, которое необходимо для массива adc_array.
Второй случай:
Код
      for (int n=ADC_SECOND;n<ADC_LAST;n++)
        {

здесь делаю тоже всякие вещи и также последним действием кидаю значения в тот же массив.

          dac1_array[n-ADC_SECOND]=adc_array[n-FILTER_COUNT];
        }

"-ADC_SECOND" - убираю смещение, которое необходимо для массива adc_array.
Т.е. как я понимаю относительно массива dac_array действия одинаковы - заполняю массив от 0 и выше.
Но во втором случае компилятор ругается - interrupt_dma2_ch4_5.c:172:21: warning: array subscript is above array bounds [-Warray-bounds]
Если переписываю последнюю строчку - dac1_array[n-(ADC_SECOND-1)] компилятор проглатывает, хотя по сути я должен вылезти за верхнюю границу.
Ругается точно на переполнение индекса dac1_array. так как adc_array[] я менял на 0.

Ой, забыл написать просьбу - "Братцы, помогите разобраться".

хех... немного локализовал проблему. Поленился убрать скобки, когда убирал "-1" и компилятор проглотил вот такую строку - "dac1_array[n-(ADC_SECOND)]=adc_array[n-FILTER_COUNT];"
Макросы, которые вычисляются необходимо закрывать в скобки, что ли?
Да. Конечно. Сам дурак. Забыл, что макрос это просто подставление текста. Вот блин sad.gif
Было задано так - #define ADC_SECOND ADC_FIRST+(ADC_COUNT/2)
Сделал так и покатило - #define ADC_SECOND (ADC_FIRST+(ADC_COUNT/2))
Славно, что на таком легком месте споткнулся.
Спасибо за внимание.
MrYuran
Цитата(-Игорь- @ Apr 27 2012, 20:14) *
Да. Конечно. Сам дурак. Забыл, что макрос это просто подставление текста. Вот блин sad.gif
Было задано так - #define ADC_SECOND ADC_FIRST+(ADC_COUNT/2)
Сделал так и покатило - #define ADC_SECOND (ADC_FIRST+(ADC_COUNT/2))
Славно, что на таком легком месте споткнулся.
Спасибо за внимание.

Вообще-то, это прописные истины.
Все арифметические выражения в макросах берутся в скобки, а действия - в скобки do{}while(0)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.