powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / как определить размер массива
25 сообщений из 50, страница 2 из 2
как определить размер массива
    #38871189
Фотография NekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskySashaMercuryА вот зачем знаменатель у вас мне не очень понятно. Нельзя обойтись без него ? В каких случаях ?
Да-да, NekZ, расскажите в каких случаях размер массива не кратен размеру элемента
Наверное, в случае с указателями
...
Рейтинг: 0 / 0
как определить размер массива
    #38871203
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NekZНаверное, в случае с указателями
Ну, да, наверное, но, как выше заметили, лишь иногда ))
...
Рейтинг: 0 / 0
как определить размер массива
    #38871829
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NekZМопед не мой, я лишь разместил объяву (С)
SashaMercuryNekZ,
почему вы используете не всем понятную конструкцию 0[a] вместо a[0]?
Чтобы туда не подставили любой объект, имеющий перегруженный operator[], а только лишь C-шный массив, для которого такой специфический синтаксис применим.

И что будет если подставить туда перегруженный оператор в первом и втором случае ?В вашем варианте не отработает ? А в классическом варианте нет?
...
Рейтинг: 0 / 0
как определить размер массива
    #38871833
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NekZ,

вы извините, это видимо тривиальный вопрос, и все остальные понимают в чём тут дело. Но я не понял до сих пор, что хорошего в том, что мы получаем порой деление на 0.

Не нравится что оператор sizeof используется 4 раза, и из них 2 дублируются. Маловероятно что происходит какая-то буферизация таких операций. Или неправ ?
...
Рейтинг: 0 / 0
как определить размер массива
    #38871874
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryНо я не понял до сих пор, что хорошего в том, что мы получаем порой деление на 0.
Хорошо то что ошибка возникнет там где она сделана. Иначе могут начаться "мистические" явления совсем в другом коде, в таких случаях искать причину намного сложнее.
...
Рейтинг: 0 / 0
как определить размер массива
    #38871876
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий, неужели правильно использовать такой грязный способ для обнаружения ошибки? Причём такой способ будет выявлять лишь частные случаи(как уже сказано выше). А есть ли смысл ловить эти частные случаи вообще ? Думаю нет
...
Рейтинг: 0 / 0
как определить размер массива
    #38871899
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryДмитрий, неужели правильно использовать такой грязный способ для обнаружения ошибки? Причём такой способ будет выявлять лишь частные случаи(как уже сказано выше). А есть ли смысл ловить эти частные случаи вообще ? Думаю нет
Это лучше чем ничего. Как выше уже написали - нет нормальных способов, поэтому каждый выкручивается по своему, максимально минимизируя ущербность своей реализации.

Частные ошибки есть смысл ловить, если они достаточно часто встречаются.
...
Рейтинг: 0 / 0
как определить размер массива
    #38871912
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryНе нравится что оператор sizeof используется 4 раза, и из них 2 дублируются. Маловероятно что происходит какая-то буферизация таких операций. Или неправ ?
sizeof во время компиляции превращается в константу, т.е. в итоге будет выражение из одних констант. Компилятор его посчитает во время компиляции и реально в коде будет использоваться только результат расчета.

Вот что отладчик показывает:
Код: plaintext
1.
2.
3.
	char buf[] = "1234567890";
	int i = ArrayLen(buf);
00413CE9  mov         dword ptr [ebp-20h],0Bh 
...
Рейтинг: 0 / 0
как определить размер массива
    #38871918
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TSashaMercuryНе нравится что оператор sizeof используется 4 раза, и из них 2 дублируются. Маловероятно что происходит какая-то буферизация таких операций. Или неправ ?
sizeof во время компиляции превращается в константу, т.е. в итоге будет выражение из одних констант. Компилятор его посчитает во время компиляции и реально в коде будет использоваться только результат расчета.

Вот что отладчик показывает:
Код: plaintext
1.
2.
3.
	char buf[] = "1234567890";
	int i = ArrayLen(buf);
00413CE9  mov         dword ptr [ebp-20h],0Bh 



Спасибо. Это классическое поведение всех компиляторов С/С++ ?
...
Рейтинг: 0 / 0
как определить размер массива
    #38871922
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryСпасибо. Это классическое поведение всех компиляторов С/С++ ?
За все сказать не могу, но думаю что все, т.к. неэффективно вставлять в код расчет выражения из одних констант.
...
Рейтинг: 0 / 0
как определить размер массива
    #38871952
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryНе нравится что оператор sizeof используется 4 раза, и из них 2 дублируются. Маловероятно что происходит какая-то буферизация таких операций. Или неправ ?sizeof вычисляется на этапе компиляции, в этом его прелесть ))
...
Рейтинг: 0 / 0
как определить размер массива
    #38872041
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TКак выше уже написали - нет нормальных способов, поэтому каждый выкручивается по своему
Поправка. Нет нормальных способов только в С, поэтому каждый С-шник выкручивается по своему, рассказывая почему он не хочет перейти на С++
...
Рейтинг: 0 / 0
как определить размер массива
    #38872188
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyDima TКак выше уже написали - нет нормальных способов, поэтому каждый выкручивается по своему
Поправка. Нет нормальных способов только в С, поэтому каждый С-шник выкручивается по своему, рассказывая почему он не хочет перейти на С++
А почему С-шник обязан переходить только на С++ ? У него есть другие варианты?
...
Рейтинг: 0 / 0
как определить размер массива
    #38872605
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonА почему С-шник обязан переходить только на С++ ? У него есть другие варианты?
А где было слово "обязан"? :)
Перейти с С проще всего на С++. Можно даже первое время продолжать писать на С, но компилировать как С++, как это сделали разрабы GCC.

У меня был опыт переписывания достаточно большого приложения с С на С++ со всеми современными фичами из Буста (смартуказатели, потоки, сеть).
Так у меня в ходе такого постепенного рефакторинга код сокращался целыми полотнами.
Куча багов просто исчезла сама по себе в результате перехода на С++.
Причем до конца весь код не был переписан.
В этом и плюс С++ - он экономит ресурсы разработчика.
...
Рейтинг: 0 / 0
как определить размер массива
    #38872758
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Переход был сопряжён с отладкой? Или "сразу" перешли и всё?
...
Рейтинг: 0 / 0
как определить размер массива
    #38872804
Фотография NekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyВ этом и плюс С++ - он экономит ресурсы разработчика.
Я бы не согласился с этим утверждением.
...
Рейтинг: 0 / 0
как определить размер массива
    #38872811
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>> Куча багов просто исчезла сама по себе в результате перехода на С++.

Эта фраза вообще интересна. Она заслуживает анализа. Интересно классифицировать
эти баги и понять что исчезло и почему.
...
Рейтинг: 0 / 0
как определить размер массива
    #38872819
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПереход был сопряжён с отладкой? Или "сразу" перешли и всё?
"Сразу" делался только небольшой допил, связанный с тем что в С++ из void* уже нельзя неявно переводить в конкретный тип, как в С. Ну и еще пару синтаксических мелочей.
А рефакторинг с использованием фич С++ делался далеко не стразу, а постепенно малыми частями, помодульно, а в некоторых случаях только отдельными функциям. С промежуточными релизами.
Поэтому большой отладки как таковой не было. А при переводе каждого модуля было просто написание теста к нему. Во многих случаях все работало с первой компиляции, т.к. алгоритм уже отлаженный, а код не писался заново, а обрезался ))

NekZЯ бы не согласился с этим утверждением.
Может вы просто недостаточно хорошо знаете С++? В этом случае действительно не экономит
"- Леонид Ильич, идем к коммунизму, а есть нечего!
- А в дороге кормить никто не обещал. "
...
Рейтинг: 0 / 0
как определить размер массива
    #38872821
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton>> Куча багов просто исчезла сама по себе в результате перехода на С++.

Эта фраза вообще интересна. Она заслуживает анализа. Интересно классифицировать
эти баги и понять что исчезло и почему.
Крэши и утечки памяти, которые не удавалось поймать, так как всегда находились более важные дела )).
А стал использовать контейнеры и смартуказатели - и вуаля ))
...
Рейтинг: 0 / 0
как определить размер массива
    #38872826
Фотография NekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyМожет вы просто недостаточно хорошо знаете С++? В этом случае действительно не экономит
"- Леонид Ильич, идем к коммунизму, а есть нечего!
- А в дороге кормить никто не обещал. "
А кто же его хорошо знает-то, товарищ?

А я тем временем пишу проектик на Rust -- отличная вещь! Производительность разработчика в разы выше, чем у опытного пользователя C++.
...
Рейтинг: 0 / 0
как определить размер массива
    #38872828
Фотография NekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyКрэши и утечки памяти, которые не удавалось поймать, так как всегда находились более важные дела )).
А стал использовать контейнеры и смартуказатели - и вуаля ))
Yep. А если ещё boost MPL туда завернуть для всяких там compile-time заклинаний, то вообще будет супер. IDE только сломается
...
Рейтинг: 0 / 0
как определить размер массива
    #38872838
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NekZА кто же его хорошо знает-то, товарищ?
Я его знаю достаточно хорошо.
NekZYep. А если ещё boost MPL туда завернуть для всяких там compile-time заклинаний, то вообще будет супер. IDE только сломается
Будьте проще, и С++ вас полюбит.
MPL вообще не предназначен для прикладных программ.
Если вы не пишете библиотеки типа Буста (что уже характеризовало бы вас как маньяка), то вам такие слова даже знать не надо.
Не удивительно что С++ вам кажется затратным.
Забивать гвозди микроскопом это достаточно муторно ))
...
Рейтинг: 0 / 0
как определить размер массива
    #38872893
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А С++ предназначен для прикладных?
...
Рейтинг: 0 / 0
как определить размер массива
    #38872915
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonА С++ предназначен для прикладных?вполне себе. Я вообще не понимаю, как они на других языках их пишут, а главное, зачем ;-))
...
Рейтинг: 0 / 0
как определить размер массива
    #38872927
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonА С++ предназначен для прикладных?
Он предназначен для всего.
Просто разные его части предназначены для разного.
Надо просто правильно применять их.
...
Рейтинг: 0 / 0
25 сообщений из 50, страница 2 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / как определить размер массива
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]