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

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Открыл глаза
Аватара пользователя
Сообщения: 41
Зарегистрирован: Вт окт 19, 2010 02:24:42
Откуда: Odessa

Сообщение 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'
Ваши мысли, господа!
Последний раз редактировалось krysun Сб ноя 13, 2010 23:38:58, всего редактировалось 1 раз.
Это лыжи не едут!!!
Реклама
lix
Опытный кот
Сообщения: 703
Зарегистрирован: Вс янв 17, 2010 15:32:19
Откуда: Курган

Сообщение lix »

в Си так делать нельзя(можно правда в одном стандарте). выносите объявление i за пределы цикла.
Реклама
Опытный кот
Аватара пользователя
Сообщения: 842
Зарегистрирован: Чт дек 31, 2009 19:27:45
Откуда: Бровари, Україна

Сообщение 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) {
                        ...
                }
                ...
        }
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Контактная информация:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18764
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

С99 рулит!!!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Открыл глаза
Аватара пользователя
Сообщения: 41
Зарегистрирован: Вт окт 19, 2010 02:24:42
Откуда: Odessa

Сообщение krysun »

Все советы учел. Проблема решилась!

Всем ОООГРОМНОЕ спасибо! :beer:
Это лыжи не едут!!!
Реклама
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»