Перейти к содержанию
    

Visual Studio объявление переменных помогите разобраться

Программирую микроконтроллеры - жизнь заставила скомпилировать библиотеку под Win32. Не могу понять почему VS ругается на первую строку:

 

size_t n = A->n;
while( n > 0 && A->p[n - 1] == 0 )

Требует чтобы я объявлял отдельно:

size_t n;
while( n > 0 && A->p[n - 1] == 0 )

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

При отсутствии исходника тяжело телепатия проходит...
Могу предположить, что выше первого варианта у Вас еще есть код. А по стандарту языка С, переменные могут быть объявлены только в начале блока.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

16 hours ago, GenaSPB said:

При отсутствии исходника тяжело телепатия проходит...

Все. Проблему решил кардинально. Установил DevC - этот скушал все и работает как надо. Единственно на что ругнулся это на отсутствие функции времени gmtime_s, но я их закрыл ключами. VS так и не заработал. Кстати, легкий C-Free также проект скушал и также ругнулся.

 

Изменено пользователем Димон Безпарольный

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 2/14/2022 at 7:02 PM, Димон Безпарольный said:

Программирую микроконтроллеры - жизнь заставила скомпилировать библиотеку под Win32. Не могу понять почему VS ругается на первую строку:

Вы бы хоть привели, что компилятор выдает, текст ошибки.

И как объявлено A, и как объявлено его поле n.

21 hours ago, GenaSPB said:

 А по стандарту языка С, переменные могут быть объявлены только в начале блока.

Объявляю в любом  месте и никогда ни предупреждений, ни ошибок компилятор не выдавал. GCC, MSVC.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

21 hours ago, GenaSPB said:

А по стандарту языка С, переменные могут быть объявлены только в начале блока.

Начиная со стандарта 1999 года, этого ограничения больше нет, переменные можно (и, согласно правилам хорошего тона, нужно) объявлять в месте использования.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, esaulenka сказал:

переменные можно (и, согласно правилам хорошего тона, нужно) объявлять в месте использования

Что за хороший тон? Первый раз слышу.

Гораздо удобнее, когда переменные объявляются в одном месте, а не размазываются по коду. Их так проще найти.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Дело привычки. Зато при объявлении по месту требования выходит меньше строк кода в ряде случаев.

А иногда и вовсе объявить все в начале функции (блока) не возможно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

54 minutes ago, andrew_b said:

Что за хороший тон? Первый раз слышу.

Ну, вот, например. Это, конечно, правила для ДРУГОГО языка, но ознакомиться с мыслями умных людей стоит.

 

56 minutes ago, andrew_b said:

Их так проще найти.

У меня гораздо чаще возникает задача "найти, кто в эту переменную пишет, и кто где читает". Проблемой "найти все локальные переменные в функции" я, наверное, ни разу в жизни не занимался.
И вот для этого чем ближе переменная к месту использования, тем лучше.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 часов назад, Arlleex сказал:

меньше строк кода

Почему кого-то волнует количество строк? Код должен быть читаемым, а не кратким. Несколько лишних строк рояли не сыграют.

11 часов назад, esaulenka сказал:

правила для ДРУГОГО языка

Это стиль кодирования конкретной компании. Что не равно "правилам хорошего тона".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, andrew_b сказал:

Почему кого-то волнует количество строк? Код должен быть читаемым, а не кратким.

Потому что краткая по содержанию функция при чтении усваивается легче, чем простынь на мониторе. Но это все лишь субъективщина.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

15 hours ago, andrew_b said:

Гораздо удобнее, когда переменные объявляются в одном месте, а не размазываются по коду. Их так проще найти.

Это если вы распечатываете код на бумаге.

На компьютере поиск выполняется иначе.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 2/16/2022 at 9:45 AM, Arlleex said:

Потому что краткая по содержанию функция при чтении усваивается легче, чем простынь на мониторе. Но это все лишь субъективщина.

Только "при прочих равных". Представьте себе дюжину операторов, записанных в одну строчку вместе с заголовком функции. Язык такое позволяет, но вот прочитать это...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, SII сказал:

Представьте себе дюжину операторов, записанных в одну строчку вместе с заголовком функции. Язык такое позволяет, но вот прочитать это...

Ну зачем же в такую крайность впадать:wink:

Конечно в одну строчку записывать код никто, скорее всего, не станет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 2/15/2022 at 4:54 PM, dimka76 said:

Объявляю в любом  месте и никогда ни предупреждений, ни ошибок компилятор не выдавал. GCC, MSVC.

Прошу прощения, GCC(DevC++) действительно не выдает ошибок. Visual Studio выдавала. Но я ее снес за ненадобностью - перешел на DevC++. Тут все работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...