Димон Безпарольный 0 Posted February 14 · Report post Программирую микроконтроллеры - жизнь заставила скомпилировать библиотеку под 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 ) Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
GenaSPB 0 Posted February 14 · Report post При отсутствии исходника тяжело телепатия проходит... Могу предположить, что выше первого варианта у Вас еще есть код. А по стандарту языка С, переменные могут быть объявлены только в начале блока. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Димон Безпарольный 0 Posted February 15 (edited) · Report post 16 hours ago, GenaSPB said: При отсутствии исходника тяжело телепатия проходит... Все. Проблему решил кардинально. Установил DevC - этот скушал все и работает как надо. Единственно на что ругнулся это на отсутствие функции времени gmtime_s, но я их закрыл ключами. VS так и не заработал. Кстати, легкий C-Free также проект скушал и также ругнулся. Edited February 15 by Димон Безпарольный Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
dimka76 0 Posted February 15 · Report post On 2/14/2022 at 7:02 PM, Димон Безпарольный said: Программирую микроконтроллеры - жизнь заставила скомпилировать библиотеку под Win32. Не могу понять почему VS ругается на первую строку: Вы бы хоть привели, что компилятор выдает, текст ошибки. И как объявлено A, и как объявлено его поле n. 21 hours ago, GenaSPB said: А по стандарту языка С, переменные могут быть объявлены только в начале блока. Объявляю в любом месте и никогда ни предупреждений, ни ошибок компилятор не выдавал. GCC, MSVC. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
esaulenka 0 Posted February 15 · Report post 21 hours ago, GenaSPB said: А по стандарту языка С, переменные могут быть объявлены только в начале блока. Начиная со стандарта 1999 года, этого ограничения больше нет, переменные можно (и, согласно правилам хорошего тона, нужно) объявлять в месте использования. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
andrew_b 0 Posted February 15 · Report post 1 час назад, esaulenka сказал: переменные можно (и, согласно правилам хорошего тона, нужно) объявлять в месте использования Что за хороший тон? Первый раз слышу. Гораздо удобнее, когда переменные объявляются в одном месте, а не размазываются по коду. Их так проще найти. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Arlleex 1 Posted February 15 · Report post Дело привычки. Зато при объявлении по месту требования выходит меньше строк кода в ряде случаев. А иногда и вовсе объявить все в начале функции (блока) не возможно. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
esaulenka 0 Posted February 15 · Report post 54 minutes ago, andrew_b said: Что за хороший тон? Первый раз слышу. Ну, вот, например. Это, конечно, правила для ДРУГОГО языка, но ознакомиться с мыслями умных людей стоит. 56 minutes ago, andrew_b said: Их так проще найти. У меня гораздо чаще возникает задача "найти, кто в эту переменную пишет, и кто где читает". Проблемой "найти все локальные переменные в функции" я, наверное, ни разу в жизни не занимался. И вот для этого чем ближе переменная к месту использования, тем лучше. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
andrew_b 0 Posted February 16 · Report post 11 часов назад, Arlleex сказал: меньше строк кода Почему кого-то волнует количество строк? Код должен быть читаемым, а не кратким. Несколько лишних строк рояли не сыграют. 11 часов назад, esaulenka сказал: правила для ДРУГОГО языка Это стиль кодирования конкретной компании. Что не равно "правилам хорошего тона". Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Arlleex 1 Posted February 16 · Report post 1 час назад, andrew_b сказал: Почему кого-то волнует количество строк? Код должен быть читаемым, а не кратким. Потому что краткая по содержанию функция при чтении усваивается легче, чем простынь на мониторе. Но это все лишь субъективщина. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
one_eight_seven 0 Posted February 16 · Report post 15 hours ago, andrew_b said: Гораздо удобнее, когда переменные объявляются в одном месте, а не размазываются по коду. Их так проще найти. Это если вы распечатываете код на бумаге. На компьютере поиск выполняется иначе. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
SII 0 Posted February 17 · Report post On 2/16/2022 at 9:45 AM, Arlleex said: Потому что краткая по содержанию функция при чтении усваивается легче, чем простынь на мониторе. Но это все лишь субъективщина. Только "при прочих равных". Представьте себе дюжину операторов, записанных в одну строчку вместе с заголовком функции. Язык такое позволяет, но вот прочитать это... Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Arlleex 1 Posted February 17 · Report post 1 час назад, SII сказал: Представьте себе дюжину операторов, записанных в одну строчку вместе с заголовком функции. Язык такое позволяет, но вот прочитать это... Ну зачем же в такую крайность впадать Конечно в одну строчку записывать код никто, скорее всего, не станет. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Димон Безпарольный 0 Posted February 18 · Report post On 2/15/2022 at 4:54 PM, dimka76 said: Объявляю в любом месте и никогда ни предупреждений, ни ошибок компилятор не выдавал. GCC, MSVC. Прошу прощения, GCC(DevC++) действительно не выдает ошибок. Visual Studio выдавала. Но я ее снес за ненадобностью - перешел на DevC++. Тут все работает. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Gradient 0 Posted February 18 · Report post error C2065: 'A' : undeclared identifier Студия вроде все четко пишет Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...