|
|
  |
Си |
|
|
|
Jan 25 2013, 07:29
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
Цитата(gotty @ Jan 25 2013, 08:33)  Моё ИМХО: в нынешней реализации Си тип bool не имеет смысла, т.к. операнды операций равно/неравно не приводятся к одному типу (bool), а используются как есть. Вот и получается что 42 != true, а (bool)42 == true в зависимости от компилятора (Не понял, почему операнды в выражении (0.5 != 'A') должны приводиться к bool) Это тоже не должно зависеть от компилятора. Т.е. если у конкретного компилятора «зависит», то он не соответствует стандарту. В выражении, ну пусть уж (42 != true), операнды используются не «как есть», а приводятся к int. Была бы она твёрдая — я бы её жевал Было бы 42UL, тогда бы true приводилось бы к unsigned long int :-) Но зато вот (42 != true) имеет значение true и в bool b = 5;в переменную будет занесено 1 даже в C99 c <stdbool.h>, не говоря уже о C++.
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
Jan 25 2013, 08:31
|

Профессионал
    
Группа: Свой
Сообщений: 1 433
Регистрация: 27-10-08
Из: Украина, Киев
Пользователь №: 41 215

|
Цитата(_Pasha @ Jan 24 2013, 23:31)  В смысле AVR, может выглядеть так CODE #include <avr/io.h> #include <string.h> void reverse(char s[]) { char *beg = (char *)&(s[0]); char *end = (char *)&(s[strlen(s)]); while(beg < end) { char c = *beg; *beg++ = *(--end); *end = c; } } А зачем тут скобки? Код char *beg = (char *)&(s[0]); char *end = (char *)&(s[strlen(s)]); *(--end); А почему вы пишите Код *(--end); Это с терминатором строки связано? А какой смысл объявлять и инициализировать "с" внутри операторного блока while? Как Вы думаете, что передается в функцию: массив или строка? Мне кажется что не очень корректно формальный аргумент сотрица, ну как будет тот-же strlen с массивом то? Может правильнее описать аргумент так: char * s ? demiurg_spb, мне не очень понравилось. читаемость отвалилась, а скилов не добавилось как по мне.
--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
|
|
|
|
|
Jan 25 2013, 09:12
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(Буратино @ Jan 25 2013, 12:31)  А почему вы пишите Код *(--end); Во-первых, пиш ете (изъявительное наклонение вместо повелительного) А во-вторых, я однажды написал * temp ++ ; имея в виду инкремент значения по указателю, а потом долго не мог понять, почему это "бесполезная операция", с т.з. компилятора.
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Jan 25 2013, 09:28
|

Профессионал
    
Группа: Свой
Сообщений: 1 433
Регистрация: 27-10-08
Из: Украина, Киев
Пользователь №: 41 215

|
Цитата(MrYuran @ Jan 25 2013, 12:12)  Во-первых, пишете (изъявительное наклонение вместо повелительного) а как же жи ,ши через и?  Цитата(MrYuran @ Jan 25 2013, 12:12)  А во-вторых, я однажды написал * temp ++ ; имея в виду инкремент значения по указателю, а потом долго не мог понять, почему это "бесполезная операция", с т.з. компилятора. * temp++ сначала плюсанется указатель, а затем получим значение по плюсанутому указателю ,постави(е)те скобки и все будет так как запланированио, но в нашем то случае именно что и не нужны они! Я так думаю
--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
|
|
|
|
|
Jan 25 2013, 09:29
|
Частый гость
 
Группа: Свой
Сообщений: 118
Регистрация: 9-12-12
Из: Курск
Пользователь №: 74 767

|
Я б пример А оптимизировал за счет второго буфера. То есть не делал тройную пересылку a=>c b=>a c=>b а однократную b[j--] => a[i++] но при этом a и b это разные массивы "b" это исходная строка, "a" это пустой массив для записи строки в обратном порядке. За счет использования второго буфера резко увеличивается скорость собственно операции.
Сообщение отредактировал telix - Jan 25 2013, 09:31
--------------------
улыбаемся ...
|
|
|
|
|
Jan 25 2013, 09:38
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(Буратино @ Jan 25 2013, 11:31)  А зачем тут скобки?
А почему вы пишите
А какой смысл объявлять и инициализировать "с" внутри операторного блока while?
Как Вы думаете, что передается в функцию: массив или строка? Мне кажется что не очень корректно формальный аргумент сотрица, ну как будет тот-же strlen с массивом то? Может правильнее описать аргумент так: char * s ? 1. Во-первых, без скобок оно не работало, во вторых, имею недостаток в виде "хронического плавания " в приоритетах, тк Си "не родной язык", по сему не брезгую лишними скобками, тем более, что в 80% случаев это правильный подход. 2. MrYuran ответил, именно после его сообщения, не помню когда и не скажу где  этот случай навечно впечатался в мозг. А делов-то всего пробел... 3. Как-раз смысл произошел из давних разговоров о свойствах GCC, что чем больше нагрузки на локальные переменные, тем будет правильнее. Листинг AVR это демострирует 4. Прототип функции кривоват, т.к. выпадает из общепринятой практики и заставляет задуматься о языке а не о том, что нужно.
|
|
|
|
|
Jan 25 2013, 09:45
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Цитата(Буратино @ Jan 25 2013, 12:28)  * temp++ сначала плюсанется указатель, а затем получим значение по плюсанутому указателю ,постави(е)те скобки и все будет так как запланированио, но в нашем то случае именно что и не нужны они! Я так думаю Я думаю не так. Цитата(_Pasha @ Jan 25 2013, 12:38)  ... имею недостаток в виде "хронического плавания " в приоритетах, тк Си "не родной язык", по сему не брезгую лишними скобками, тем более, что в 80% случаев это правильный подход. Я выписал на листок приоритеты операций, и держу его перед мор над монитором. А иногда еще в текстовые файлы - заметки по проекту - вставляю. И теперь безошибочно пишу что-то вроде a << 4 | b; А Буратино может набить себе тату - таблицу с приоритетами. Лучшего вряд ли можно посоветовать!
|
|
|
|
|
Jan 25 2013, 09:48
|

Профессионал
    
Группа: Свой
Сообщений: 1 433
Регистрация: 27-10-08
Из: Украина, Киев
Пользователь №: 41 215

|
Цитата(_Pasha @ Jan 25 2013, 12:38)  1. Во-первых, без скобок оно не работало, во вторых, имею недостаток в виде "хронического плавания " в приоритетах, тк Си "не родной язык", по сему не брезгую лишними скобками, тем более, что в 80% случаев это правильный подход. 2. MrYuran ответил, именно после его сообщения, не помню когда и не скажу где  этот случай навечно впечатался в мозг. А делов-то всего пробел... 3. Как-раз смысл произошел из давних разговоров о свойствах GCC, что чем больше нагрузки на локальные переменные, тем будет правильнее. Листинг AVR это демострирует 4. Прототип функции кривоват, т.к. выпадает из общепринятой практики и заставляет задуматься о языке а не о том, что нужно. Хорошо ,мне нравится ваш вариант с указателями давайте его допилим и перейдем ко второй задачке!? Итак: давайте формальный аргумент заменим на "char * s", это правильнее будет судя по всему. Раз так, то тогда зачем приводить &(s[0]); к (char *) да еще и скобки использовать!? Сначала индекс ,а только потом одноместные унарные! Код char *beg = (char *)&(s[0]);
--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
|
|
|
|
|
Jan 25 2013, 09:52
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(ViKo @ Jan 25 2013, 12:45)  Я выписал на листок приоритеты операций, и держу его перед мор над монитором. А иногда еще в текстовые файлы - заметки по проекту - вставляю. И теперь безошибочно пишу что-то вроде a << 4 | b; Дык я это расцениваю(для себя) как write only style  Тем более, не встречал случаев, когда лишние скобки влияют не результат. -- Закномерность: чем более пустяковый вопрос, тем оживленнее тема. Насчет замечания Herz. Только штука в том, что здесь из простейшего произрастают интересные вещи. Довольно часто.
|
|
|
|
|
Jan 25 2013, 09:53
|

Профессионал
    
Группа: Свой
Сообщений: 1 433
Регистрация: 27-10-08
Из: Украина, Киев
Пользователь №: 41 215

|
Цитата(MrYuran @ Jan 25 2013, 12:48)  жи это жи, а ше это ше ) Насчет скобок - лучше явно указать. И самому спокойнее, и читателю понятнее будет. Нет, давайте так: в этих "задачках" сделаем все правильно ,а в жизни будем беспокоится о читателях. Ищу самую правильную и изящную реализацию, хочу вот именно так и не иначе.
--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|