Собственно, в свете последних работ задумался над вопросом: почему С/С++-ники все как один не любят писать индекс элемента массива? Это ж откуда такая дурная привычка пошла?
Пример (первый попавшийся в Google):
for (i=0;i<copy_this;i++)
*(to_copy+i)=*(from_copy+i);
Гораздо благороднее выглядит так:
for (i=0;i<copy_this;i++)
to_copy[i]=from_copy[i];
Причем последнее будет работать в Managed C#, Java и других подобных языках.
А теперь объясните мне в чем смысл этой глупости? По кол-ву символов -- второй меньше аж на 4 символа. Второй нагляднее. По скорости работы -- насколько я понимаю второй будет быстрее, т.к. не нужно складывать числа.
Здравствуйте, 0K, Вы писали:
0K>Собственно, в свете последних работ задумался над вопросом: почему С/С++-ники все как один не любят писать индекс элемента массива?
не все
0K>Пример (первый попавшийся в Google): 0K>
0K>А теперь объясните мне в чем смысл этой глупости? По кол-ву символов -- второй меньше аж на 4 символа. Второй нагляднее.
1ый — понты на тему "ща я точно компилятору скажу что делать надо"
0K>По скорости работы -- насколько я понимаю второй будет быстрее, т.к. не нужно складывать числа.
а эта-то глупость откуда тут?
0K>Собственно, в свете последних работ задумался над вопросом: почему С/С++-ники все как один не любят писать индекс элемента массива? Это ж откуда такая дурная привычка пошла?
Странно, первый раз такое вижу, чтоб форму записи *(a + i) предпочитали a[i].
0K>По скорости работы -- насколько я понимаю второй будет быстрее, т.к. не нужно складывать числа.
По скорости работы они одинаковые, числа надо складывать и там, и там — это одно и то же, только по разному записанное.
Здравствуйте, 0K, Вы писали:
0K>Собственно, в свете последних работ задумался над вопросом: почему С/С++-ники все как один не любят писать индекс элемента массива?
Это неправда.
0K>По скорости работы -- насколько я понимаю второй будет быстрее, т.к. не нужно складывать числа.
Совершенно одинаково. Можно ещё написать вот так:
for (i=0;i<copy_this;i++)
i[to_copy]=i[from_copy];
Re[2]: Почему C-шники не пишут индекс массива в []?
Здравствуйте, Antikrot, Вы писали: A>1ый — понты на тему "ща я точно компилятору скажу что делать надо"
Можно ещё добавить, что в первом случае компилятору сложнее будет анализировать код на всякие потенциальные ошибки адресации.
0K>>По скорости работы -- насколько я понимаю второй будет быстрее, т.к. не нужно складывать числа. A>а эта-то глупость откуда тут?
Оттуда, что по умолчанию в первом случае будет команда add и возможно mul, а во втором lea. Но на самом деле сейчас компиляторы умные и процессоры уже не те, что были раньше. Так что хз как там что быстрее.
Здравствуйте, 0K, Вы писали:
0K>Собственно, в свете последних работ задумался над вопросом: почему С/С++-ники все как один не любят писать индекс элемента массива? Это ж откуда такая дурная привычка пошла?
Я бы сказал, что это присуще только Сишникам. С++ники пишут нормально.
Здравствуйте, 0K, Вы писали:
0K>Собственно, в свете последних работ задумался над вопросом: почему С/С++-ники все как один не любят писать индекс элемента массива? Это ж откуда такая дурная привычка пошла?
Возможно, в этом контексте используется более сложная адресная арифметика. Не писать же, например, to_copy[-i] или to_copy[to_copy].
Здравствуйте, 0K, Вы писали:
0K>Собственно, в свете последних работ задумался над вопросом: почему С/С++-ники все как один не любят писать индекс элемента массива? Это ж откуда такая дурная привычка пошла?
Это типа тролинг, да? Откуда сведения, что прямо "все как один"?
Здравствуйте, Aleх, Вы писали:
A>Оттуда, что по умолчанию в первом случае будет команда add и возможно mul, а во втором lea. Но на самом деле сейчас компиляторы умные и процессоры уже не те, что были раньше. Так что хз как там что быстрее.
Согласно определению языка Си, выражение a[b] абсолютно эквивалентно выражению *(a+b). В Си++ эта эквивалентность для встроенных типов сохраняется.
Здравствуйте, 0K, Вы писали:
0K>Собственно, в свете последних работ задумался над вопросом: почему С/С++-ники все как один не любят писать индекс элемента массива?
Тебе попались какие то ацкие извращенцы.
Никто в здравом уме так писать не станет.
0K>А теперь объясните мне в чем смысл этой глупости?
Без понятия. Спроси у авторов первого "шедевра".
Может у них нет на клавиатуре квадратных скобок или по какой то причине они не могут их набрать а триграфы суть ересь богомерзкая и творение диаволово.
По скорости работы -- насколько я понимаю второй будет быстрее, т.к. не нужно складывать числа.
Нет. Они абсолютно одинаковы.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, Aleх, Вы писали:
A>Здравствуйте, Antikrot, Вы писали: A>>1ый — понты на тему "ща я точно компилятору скажу что делать надо" A>Можно ещё добавить, что в первом случае компилятору сложнее будет анализировать код на всякие потенциальные ошибки адресации.
не совсем понял, это какие ошибки имеются в виду?
0K>>>По скорости работы -- насколько я понимаю второй будет быстрее, т.к. не нужно складывать числа. A>>а эта-то глупость откуда тут? A>Оттуда, что по умолчанию в первом случае будет команда add и возможно mul, а во втором lea. Но на самом деле сейчас компиляторы умные и процессоры уже не те, что были раньше.
по умолчанию — это как? можно узнать, зачем там lea вообще? вместо add? а что мешает сложить в mov так же, как в lea? кстати, никто не указывал тип процессора...
A>Так что хз как там что быстрее.
одинаково оно будет. вторая запись почти наверняка во внутреннем представлении компилятора эквивалентна первой.
Здравствуйте, 0K, Вы писали:
0K>А теперь объясните мне в чем смысл этой глупости? По кол-ву символов -- второй меньше аж на 4 символа. Второй нагляднее. По скорости работы -- насколько я понимаю второй будет быстрее, т.к. не нужно складывать числа.
Скорее всего, это неверно интеретированное наследие старых компиляторов. Например, вот такой код:
for(int i = 0; i < length_of_some_str; ++i) { char c = s[i]; ... }
Я с этим возился, чтобы не соврать, в 1995 или 1996 году, на, кажется Watcom не то 9, не то 10. Но здесь понятно — дело именно в скорости инкремента указателя против скорости индексных вычислений. Но на кой ляд писать так, как ты процитировал, я в упор не догоняю.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
0K>Причем последнее будет работать в Managed C#, Java и других подобных языках.
Дык эта. Специально пишут так, чтобы программисты на C#, Java и т.п. ничего не поняли. Штоб знали свое место
0K>А теперь объясните мне в чем смысл этой глупости? По кол-ву символов -- второй меньше аж на 4 символа. Второй нагляднее. По скорости работы -- насколько я понимаю второй будет быстрее, т.к. не нужно складывать числа.
Одинаково совершенно. Компиляторы давно научились понимать, что в обоих вариантах написано одно и то же, и генерируют одинаковый код.
Re[2]: Почему C-шники не пишут индекс массива в []?
Здравствуйте, Aleх, Вы писали:
0K>>Собственно, в свете последних работ задумался над вопросом: почему С/С++-ники все как один не любят писать индекс элемента массива? Это ж откуда такая дурная привычка пошла? A>Я бы сказал, что это присуще только Сишникам. С++ники пишут нормально.
Это потому, что вы никогда не знаете, перегружены ли у вас квадратные скобки
Здравствуйте, 0K, Вы писали:
0K>Собственно, в свете последних работ задумался над вопросом: почему С/С++-ники все как один не любят писать индекс элемента массива? Это ж откуда такая дурная привычка пошла?
0K>Пример (первый попавшийся в Google):
0K>
0K>Причем последнее будет работать в Managed C#, Java и других подобных языках.
0K>А теперь объясните мне в чем смысл этой глупости? По кол-ву символов -- второй меньше аж на 4 символа. Второй нагляднее. По скорости работы -- насколько я понимаю второй будет быстрее, т.к. не нужно складывать числа.
По скорости работы ...
— был у меня случай, когда *(to_copy+i)=*(from_copy+i) работал значительно быстрее. С++ gnu compiler (не знаю какой) на Linux делал код для vxWorks 5.*
Re[2]: Почему C-шники не пишут индекс массива в []?