powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Что не так в этой функции ?
21 сообщений из 21, страница 1 из 1
Что не так в этой функции ?
    #38913224
gera3323
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
size_t str_len( const char *str )
{
	const char *begin = str;
	
		while( *str != '\0' ) {

			str++;
		}

	return ( str - begin );
}

void main( void )
{
	char *text = "hello";

	cout<<str_len(text);

	cin.get();

	system("pause");
}
...
Рейтинг: 0 / 0
Что не так в этой функции ?
    #38913238
Фотография NekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gera3323,

strlen или std::string::size не айс?
...
Рейтинг: 0 / 0
Что не так в этой функции ?
    #38913242
gera3323
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NekZ,

нет
...
Рейтинг: 0 / 0
Что не так в этой функции ?
    #38913302
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gera3323,

Если функция должна вернуть длину строки однобайтовых символов или символов в стиле UTF-8
в виде кол-ва байт -- то я ничего не вижу неправильного.

Разве что можно было бы добавить ещё проверку, что str != NULL.
...
Рейтинг: 0 / 0
Что не так в этой функции ?
    #38913346
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivя ничего не вижу неправильного.
А использование в качестве итератора параметра вместо локальной переменной тебя не смущает?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Что не так в этой функции ?
    #38913356
RWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лично меня смутило только то, что typeof(str - begin) == ptrdiff_t, а возвращается size_t, но здесь это не сможет навредить.
...
Рейтинг: 0 / 0
Что не так в этой функции ?
    #38913375
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovА использование в качестве итератора параметра вместо локальной переменной тебя не смущает?..
Это обычная практика.
...
Рейтинг: 0 / 0
Что не так в этой функции ?
    #38913393
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyЭто обычная практика.
Само по себе, чтобы отдельную переменную не заводить - да, практика обычная. Но тут-то
локальная переменная по-любому уже объявлена. Просто я сомневаюсь в интеллекте
компилятора. Вдруг он начнёт сохранять значение в память на каждой итерации?..
Локальную-то переменную ему проще догадаться сделать регистровой.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Что не так в этой функции ?
    #38913415
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovПросто я сомневаюсь в интеллекте
компилятора.
Вопрос бы "что не так?", а не "как оптимизировать?" ))
...
Рейтинг: 0 / 0
Что не так в этой функции ?
    #38913424
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Впрочем, я думаю что компилятор скопирует аргумент в регистр перед циклом.
...
Рейтинг: 0 / 0
Что не так в этой функции ?
    #38913435
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyВопрос бы "что не так?", а не "как оптимизировать?" ))

Ну, как по мне, так неоптимальный код и есть "не так". Я слишком стар для модной нынче
тенденции создавать невозможно тормозные программы.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Что не так в этой функции ?
    #38913489
gera3323
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

а как оптимизировать ? так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
size_t str_len( const char  *str )
{
	const register char *first = str;
	
		while( *str++ != '\0' ) 
			;

	return ( str - first - 1 );
}
...
Рейтинг: 0 / 0
Что не так в этой функции ?
    #38913494
gera3323
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gera3323,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
size_t str_len(  register const char *str )
{
	const char *first = str;
	
		while( *str++ != '\0' ) 
			;

	return ( str - first - 1 );
}
...
Рейтинг: 0 / 0
Что не так в этой функции ?
    #38913499
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gera3323, думаю что оптимизацию можно закончить на самом первом исходнике.
Я не знаю кто от тебя требует такой глубины но дальше в оптимизации возможности
С++ заканчиваются и начинаются тонкости железной архитектуры. Ассемблер.
Системы команд и прочее.
...
Рейтинг: 0 / 0
Что не так в этой функции ?
    #38913512
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovMasterZivя ничего не вижу неправильного.
А использование в качестве итератора параметра вместо локальной переменной тебя не смущает?..


Нет.
...
Рейтинг: 0 / 0
Что не так в этой функции ?
    #38913519
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gera3323Dimitry Sibiryakov,

а как оптимизировать ? так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
size_t str_len( const char  *str )
{
	const register char *first = str;
	
		while( *str++ != '\0' ) 
			;

	return ( str - first - 1 );
}



Оптимизируют это вообще не так, а ассемблерной вставкой (одна комманда).

Но проблема в том, что я подозреваю, что реальные функции с таким назначением гораздо сложнее.
...
Рейтинг: 0 / 0
Что не так в этой функции ?
    #38913542
gera3323
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

спасибо.

исходник функции wcslen и strlen почти такой же
...
Рейтинг: 0 / 0
Что не так в этой функции ?
    #38913545
gera3323
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

за исключением return ( str - first - 1 );
...
Рейтинг: 0 / 0
Что не так в этой функции ?
    #38913598
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivя подозреваю, что реальные функции с таким назначением гораздо сложнее.а чего там может быть "сложнее"? и захочешь, а не усложнишь )))
...
Рейтинг: 0 / 0
Что не так в этой функции ?
    #38913623
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И опция register для современного компиллятора.... хм.. невкурсе но ЕМНИП опциональна.
...
Рейтинг: 0 / 0
Что не так в этой функции ?
    #38913668
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
register - всегда рекомендация.
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Что не так в этой функции ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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