Ну, дак, со стрингом ещё разбираться надо… А тут своё, родимое.)
Так я ж о том и говорю)).
Но до Stringa ещё вплотную не добрался, вообще медленно учусь.
Да , завис пока в Си (в основном на Тиньках). Раздражает немного, что нельзя внутри цикла for переменную объявить.
Но, думаю скоро пойдём дальше))
Почему? Кто-то запретил? Кто?
Раньше тут Клапауций всем всё запрещал, но его, вроде, давненько не видно. Кто сейчас запрещает?
Я сам удивился, но WinAvr в Proteus выдаёт ошибку. Если объявить заранее норм. Файл С, если что.
Быть может, устаревшая версия компилятора, не понял пока точно
Ну, ни кода, ни ошибки Вы не показали, потому, мне трудно сказать, что он там Вам выдаёт и почему.
Но, что я могу сказать совершенно точно и определённо - в языке Си (в т.ч. и с компилятором WinArv) переменные внутри цикла for объявлять можно сколько угодно.
Спойлер
#include <avr/io.h>
unsigned char a = 0;
unsigned char b = 5;
unsigned char c = 1;
int main()
{
for(unsigned char h = 0; h < 7; h++)
a += b + c;
while (1)
;
return 0;
}
avr-gcc.exe -Wall -gdwarf-2 -fsigned-char -MD -MP -DF_CPU=1000000 -O1 -mmcu=attiny13 -o “main.o” -c “…/main.c”
…/main.c: In function ‘main’:
…/main.c:8: error: ‘for’ loop initial declaration used outside C99 mode
make: *** [main.o] Error 1
P.S. Извиняюсь, строки не совпадали, долго редактировал
С примером было бы нагляднее… А тогда и ответ был бы конкретным.
Поменяй на С90 в настройках (или наоборот на С99, если стоит С90). У меня подобное было в MPLAB X IDE…
Может не правильно выразился, надо было сказать внутри объявления цикла?
Спойлер
#include <avr/io.h>
unsigned char a = 0;
unsigned char b = 5;
unsigned char c = 1;
int main()
{
unsigned char h;
for( h = 0; h < 7; h++)
a += b + c;
while (1)
;
return 0;
}
avr-gcc.exe -mmcu=attiny13 -o “./Debug.elf” “main.o”
avr-objcopy -O ihex -R .eeprom “./Debug.elf” “./Debug.hex”
avr-objcopy -j .eeprom --set-section-flags=.eeprom=“alloc,load” --change-section-lma .eeprom=0 --no-change-warnings -O ihex “./Debug.elf” “./Debug.eep” || exit 0
Compiled successfully.
Так норм.
Да, спасибо, позже попробую, сейчас уже должен уйти
Совершенно верно. Именно потому я Вас неверно понял. Внутри цикла это
for (i=0; i < 10; i++) {
// вот здесь
}
А так - Ваша проблема не в версии компилятора, а в версии стандарта языка, но Вам это уже @BOOM сказал.
Просто так не поменяешь, где ещё искать, пока не знаю. Вообще это не смертельно, т.к. я пока ещё жив…)))
Кстати да! В Микрочип Студии 7.0 ругается.
Два цикла друг за другом. Если объявить внутри X в обоих
for( int x…)
for(int x…)
то ругается на множественное определение.
Ежели X объявить перед циклами:
int x;
for(x…)
for(x…)
То ругается на не объявленную X.
Смотри #29
Прошу прощения, ошибся я. Если переменная объявлена перед циклами
int x;
for(x…)
for(x…)
То всё нормально. Сам запутался.
Это на XC8.
Честно говоря, удивлен.
Мне всегда казалось, что
for(int i...
и
int i;
for(i...
это две разные конструкции: первая - стандартный цикл, где переменная цикла вне цикла не определена. А вторая применяется в том случае, если значение переменной цикла нужно за пределами цикла. Например, когда цикл прерывается на середине.
И как теперь жить дальше?
Так это и есть две разные конструкции. Так же дальше и живи ![]()
И как теперь жить дальше?
Ага. И при чём здесь ХС8?
Выше Петрович написал - не в компиляторе дело.
@te238s рано опохмеляться начал, на старые дрожжи попал ![]()
