Страница 1 из 1

Объявление типа "for(int i =0...." не раб. (Решено)

Добавлено: Вс ноя 07, 2010 02:32:02
krysun
На это:

Код: Выделить всё

for(int i = 0; i <= 7; i++)

Пишет это:

Код: Выделить всё

Error: C:\cvavr2\my_project\tvister\1.c(8): undefined symbol 'int'
Error: C:\cvavr2\my_project\tvister\1.c(8): undefined symbol 'j'

Ваши мысли, господа!

Re: CVAVR. Объявление типа "for(int i =0...." не работает.

Добавлено: Вс ноя 07, 2010 09:39:32
lix
в Си так делать нельзя(можно правда в одном стандарте). выносите объявление i за пределы цикла.

Re: CVAVR. Объявление типа "for(int i =0...." не работает.

Добавлено: Вс ноя 07, 2010 10:09:21
avreal
Небольшо уточнение
«можно правда в одном стандарте» звучит почти как «ну вот есть несколько разных равноправных стандартов, в каком-то одном из них это можно» и такая фраза, на мой взгляд, больше подходит для расширений стандарта в духе привязки переменной к адресам через @.
Стандарты же на язык программирования С развиваются последовательно, с выходом нового стандарта следует старые называть устаревшими, а не новый «одним».
Тем более, что стандарту C99 уже одиннадцать лет.

А то так можно сказать, что так

Код: Выделить всё

int foo(int a, int b)
{
        return a+b;
}
«можно в некоторых стандартах, а в С нужно делать так»

Код: Выделить всё

foo(a,b)
        int a, b;
{
        return a+b;
}
(а ведь когда-то и так писать приходилось, эх...)

Вот если в предыдущих фразах слово «стандарт» заменить на слово «компилятор», тогда всё нормально — «в некоторых компиляторах уже можно применять стандарт С99», «некоторые компилятры не поддреживают стандарт С99», «в этом комипляторе стандарт С99 поддержан не полностью».

p.s. Да, кстати, если уж компилятор не поддерживает из С99 даже объявление по месту применения, то выносить нужно не «за пределы цикла», а «в начало охватывающего блока», что звучит на первый взгляд похоже и иногда даже совпадает по резуьтату, но означает, что из

Код: Выделить всё

        while(1) {
                ...
                for(int i=0; i < 1000; ++i) {
                        ...
                }
                ...
        }
надо делать не

Код: Выделить всё

        while(1) {
                ...
                int i;
                for(i=0; i < 1000; ++i) {
                        ...
                }
                ...
        }
а

Код: Выделить всё

        while(1) {
                int i;
                ...
                for(i=0; i < 1000; ++i) {
                        ...
                }
                ...
        }

Re: CVAVR. Объявление типа "for(int i =0...." не работает.

Добавлено: Вс ноя 07, 2010 10:45:49
ARV
С99 рулит!!!

Re: CVAVR. Объявление типа "for(int i =0...." не работает.

Добавлено: Сб ноя 13, 2010 23:38:20
krysun
Все советы учел. Проблема решилась!

Всем ОООГРОМНОЕ спасибо! :beer: