реклама на сайте
подробности

 
 
> Си
Буратино
сообщение Jan 24 2013, 19:24
Сообщение #1


Профессионал
*****

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



ЗАДАЧА А
Есть функция (K&R), которая обращает порядок символов в строке. Вот она:


Код
#include <string.h>

void reverse (char s[]) {
   int c, i, j;
  
   for (i = 0, j = strlen(s) - 1; i < j; i++, j--) {
      c = s[i];
      s[i] = s[j];
      s[j] = c;
   }
}


Вопросы:
1. Какие слабые места у данной реализации.
2. Как можно оптимизировать код. И что конкретно это даст.
3. Какие есть варианты реализации функции.

Спасибо!


--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
Go to the top of the page
 
+Quote Post
19 страниц V  « < 17 18 19  
Start new topic
Ответов (270 - 283)
demiurg_spb
сообщение Mar 27 2013, 09:28
Сообщение #271


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(ViKo @ Mar 27 2013, 11:38) *
Хотя... а в чем недоделанность _Bool ? Кроме ужасного названия?
Он размером с int.
И например на AVR от него никакого толку т.к. не помещается в байт.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
ViKo
сообщение Mar 27 2013, 09:45
Сообщение #272


Универсальный солдатик
******

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



Надо в стандарте записать, чтобы одиночные битовые поля имели тип bool.

Цитата(demiurg_spb @ Mar 27 2013, 12:28) *
И например на AVR от него никакого толку т.к. не помещается в байт.

И в крынку битовое поле не лезет? Оно же имеет тип int. sm.gif
Go to the top of the page
 
+Quote Post
XVR
сообщение Mar 28 2013, 10:51
Сообщение #273


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(ARV @ Mar 27 2013, 12:27) *
1. возможность для автоматических переменных задавать одинаковые идентификаторы во вложенных блоках.
Согласен, но с одним уточнением - намеренное использование одинаковых идентификаторов. Иначе программисту придется перед тем, как сделать например такое в какой то функции -
Код
{
int i;
for(i=0;i<10;++i) a[i]=i;
}
просмотреть весь остальной код функции, что бы убедится, что там нигде не используется i

Цитата
3. использование "для оптимальности" вариаций 5[a] и аналогичных "трюков".
Это не 'трюк', это вообще 'курьез'. Использовать это в программе можно только с явной целью всех запутать. rolleyes.gif Так что с этим пунктом тоже согласен.

Go to the top of the page
 
+Quote Post
ar__systems
сообщение Mar 28 2013, 13:01
Сообщение #274


self made
****

Группа: Свой
Сообщений: 855
Регистрация: 7-03-09
Из: Toronto, Canada
Пользователь №: 45 795



Цитата(ViKo @ Mar 27 2013, 03:17) *
А я люблю писать компактно, без лишних скобок, с минимальным количеством операторов. Считаю, что и компилируется более компактно, и работает чуть быстрее

Вы еще без лишних пробелов пишите, вдруг более компактно компилироваться будет )))
Go to the top of the page
 
+Quote Post
ViKo
сообщение Mar 28 2013, 13:22
Сообщение #275


Универсальный солдатик
******

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



Цитата(ar__systems @ Mar 28 2013, 16:01) *
Вы еще без лишних пробелов пишите, вдруг более компактно компилироваться будет )))

Вот это в мое понятие о красоте и целесообразности не укладывается! Посмотрел, как в книжках пишут, на форуме, выработал свой стиль. Взял лучшее.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Mar 28 2013, 13:27
Сообщение #276


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



astyle рулит - за секунду переформатирует любой "страшный" си-код под свои предпочтения.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
SyncLair
сообщение Mar 28 2013, 17:02
Сообщение #277


Местный
***

Группа: Свой
Сообщений: 209
Регистрация: 6-01-12
Пользователь №: 69 197



Цитата(demiurg_spb @ Mar 28 2013, 17:27) *
astyle рулит - за секунду переформатирует любой "страшный" си-код под свои предпочтения.

Может подскажите как заставить astyle переменные писать с начала строки а код с таба?
Код
int fn(int a,int b)
{
int c;
<TAB>c = a+ b;
<TAB>какой-то код
return c;
}


--------------------
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Mar 29 2013, 05:15
Сообщение #278


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(SyncLair @ Mar 28 2013, 21:02) *
Может подскажите как заставить astyle переменные писать с начала строки а код с таба?
Не подскажу.
Никогда такого желания не возникало.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Apr 5 2013, 07:08
Сообщение #279


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Вот пример макроса, используемого в исходниках Linux.
Тот кто сможет это осознать уже заслуживает медали;-)

Код
#define container_of(ptr, type, member) ({ \
                const typeof( ((type *)0)->member ) *__mptr = (ptr);
                (type *)( (char *)__mptr - offsetof(type,member) );})


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
sasamy
сообщение Apr 5 2013, 07:37
Сообщение #280


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(demiurg_spb @ Apr 5 2013, 11:08) *
Вот пример макроса используемого в исходниках Linux.
Тот кто сможет это осознать уже заслуживает медали;-)

Код
#define container_of(ptr, type, member) ({ \
                const typeof( ((type *)0)->member ) *__mptr = (ptr);
                (type *)( (char *)__mptr - offsetof(type,member) );})


Вычисляет адрес структуры типа type по известному указателю ptr на ее элемент с именем member

Сообщение отредактировал sasamy - Apr 5 2013, 07:42
Go to the top of the page
 
+Quote Post
neiver
сообщение Apr 5 2013, 10:20
Сообщение #281


Местный
***

Группа: Участник
Сообщений: 214
Регистрация: 22-03-10
Из: Саратов
Пользователь №: 56 123



Цитата(sasamy @ Apr 5 2013, 11:37) *
Вычисляет адрес структуры типа type по известному указателю ptr на ее элемент с именем member

Тому кто сможет сделать этот макрос без использования трёх применённых там GCC-шных расширений, используя только стандартный С99, тому можно сразу памятник нерукотворный sm.gif
Go to the top of the page
 
+Quote Post
SyncLair
сообщение Apr 5 2013, 20:17
Сообщение #282


Местный
***

Группа: Свой
Сообщений: 209
Регистрация: 6-01-12
Пользователь №: 69 197



Цитата(neiver @ Apr 5 2013, 14:20) *
Тому кто сможет сделать этот макрос без использования трёх применённых там GCC-шных расширений, используя только стандартный С99, тому можно сразу памятник нерукотворный sm.gif

как то я не вижу трёх расишрений -- вроде ведь только одно (TYPEOF()) ?
и TYPEOF() * на void * можно заменить ?




--------------------
Go to the top of the page
 
+Quote Post
sasamy
сообщение Apr 6 2013, 07:22
Сообщение #283


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(neiver @ Apr 5 2013, 14:20) *
Тому кто сможет сделать этот макрос без использования трёх применённых там GCC-шных расширений, используя только стандартный С99, тому можно сразу памятник нерукотворный sm.gif


А зачем ? Это - не для всех sm.gif
http://www.ibm.com/developerworks/ru/library/l-gcc-hacks/
Go to the top of the page
 
+Quote Post
Nixon
сообщение Apr 6 2013, 08:27
Сообщение #284


Гуру
******

Группа: Админы
Сообщений: 2 736
Регистрация: 17-06-04
Из: Киев
Пользователь №: 48



Код
#define CONTAINING_RECORD(address, type, field) ((type *)((unsigned char *)(address) - (unsigned char *)(&((type *)0)->field)))

Ставьте памятник sm.gif Авторам TNKernel sm.gif


--------------------
Вам помочь или не мешать?
Go to the top of the page
 
+Quote Post

19 страниц V  « < 17 18 19
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 12:40
Рейтинг@Mail.ru


Страница сгенерированна за 0.01895 секунд с 7
ELECTRONIX ©2004-2016