Jump to content

    

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

Recommended Posts

Программирую микроконтроллеры - жизнь заставила скомпилировать библиотеку под 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 )

 

Share this post


Link to post
Share on other sites

GenaSPB

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

Share this post


Link to post
Share on other sites

16 hours ago, GenaSPB said:

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

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

 

Edited by Димон Безпарольный

Share this post


Link to post
Share on other sites

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

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

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

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

21 hours ago, GenaSPB said:

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

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

Share this post


Link to post
Share on other sites

esaulenka
21 hours ago, GenaSPB said:

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

Share this post


Link to post
Share on other sites

Arlleex

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

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

Share this post


Link to post
Share on other sites

esaulenka
54 minutes ago, andrew_b said:

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

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

 

56 minutes ago, andrew_b said:

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

15 hours ago, andrew_b said:

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.