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

 
 
> Возврат значения char */char const *
jcxz
сообщение May 10 2017, 10:28
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Имеется функция:
char *StrFunc(char const *str) {}
Внутри она использует str именно как char const * (только чтение) и потом возвращает например: str+N (N - типа int).
Но в качестве вх. аргумента в неё могут передаваться как char * так и char const * - нет проблем, приведение типа делается автоматом.
Но хочется, чтобы и возвращаемое значение было того же типа, что и передано: для char * - char *, для char const * - char const *.
Чтобы не было необходимости делать: char const *s; ... ; s = (char const *)StrFunc(s);
Понятно, что можно объявить inline функцию, в которой сделать приведение к нужному типу. Но тогда, с низким уровнем оптимизации, функция не будет заинлайнена.
Или можно перегрузить эту функцию с другим типом аргумента/возвращаемого значения - опят будут две функции, выполняющие одно действие.
Может есть более элегантное решение?
Как бы так объявить алиас для данной функции с другим типом аргумента/возвращаемого значения?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Arlleex
сообщение Jan 11 2018, 19:48
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264



Под рукой нет компилятора, но, на мой взгляд, было бы хорошо подумать над передачей не указателя, а указателя на указатель:
Код
int Func(const char **str)

В качестве параметров, опять же, либо char*, либо const char* - приведется автоматически, а в теле изменяете *str. В возвращаемом значении возвращаете, получилось сдвинуть или вылезли за границу строки... Оно?

P.S. Только щас обратил внимание на дату сообщения... Сорри sm.gif

Сообщение отредактировал Arlleex - Jan 11 2018, 19:51
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jan 11 2018, 21:30
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Arlleex @ Jan 11 2018, 21:48) *
Под рукой нет компилятора, но, на мой взгляд, было бы хорошо подумать над передачей не указателя, а указателя на указатель:

И сделать текст исходника ещё более громоздким? И получить более громоздкий скомпилированный код?
Если было например:
char const *s; ... ; s = (char const *)StrFunc(s + 5);
то теперь будет ещё более громоздкая запись с сохранением в промежуточную переменную перед вызовом и чтением из неё - после.
Получим гораздо более развесистый текст. А уж код какой получится!.... Вместо простого ADDS R0, Rx, #5 перед вызовом, теперь будет: выделение места на стеке + запись в стек (s+5) + чтение из памяти внутри функции + удаление стекового фрейма после вызова функции - команд получается в несколько раз больше.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- jcxz   Возврат значения char */char const *   May 10 2017, 10:28
- - scifi   Цитата(jcxz @ May 10 2017, 13:28) Имеется...   May 10 2017, 10:38
|- - jcxz   Цитата(scifi @ May 10 2017, 12:38) Причём...   May 10 2017, 11:52
|- - novikovfb   Цитата(jcxz @ May 10 2017, 15:52) Вот есл...   May 10 2017, 11:56
||- - k155la3   Цитата(novikovfb @ May 10 2017, 14:56) ша...   May 10 2017, 14:37
|- - scifi   Цитата(jcxz @ May 10 2017, 14:52) Плохое ...   May 10 2017, 12:19
||- - jcxz   Цитата(scifi @ May 10 2017, 14:19) Как жи...   May 10 2017, 12:41
|- - Сергей Борщ   QUOTE (jcxz @ May 10 2017, 14:52) А как ж...   May 10 2017, 14:14
- - Сергей Борщ   QUOTE (jcxz @ May 10 2017, 13:28) Понятно...   May 10 2017, 11:41
- - Шаманъ   Цитата(jcxz @ May 10 2017, 13:28) Имеется...   May 10 2017, 18:25
- - esaulenka   Что-то не понял, почему нельзя возвращать указател...   May 11 2017, 11:36
|- - demiurg_spb   https://gcc.gnu.org/onlinedocs/gcc-4.4.7/gc...r-Bu...   May 11 2017, 14:37
|- - jcxz   Цитата(esaulenka @ May 11 2017, 13:36) Чт...   May 17 2017, 07:09
|- - Сергей Борщ   QUOTE (jcxz @ May 17 2017, 10:09) Во-перв...   May 17 2017, 11:09
|- - jcxz   Цитата(Сергей Борщ @ May 17 2017, 13:09) ...   May 17 2017, 11:21
|- - scifi   Цитата(jcxz @ May 17 2017, 14:21) Ничего ...   May 17 2017, 11:26
- - krux   А вариант с union вам не подойдет ?   May 17 2017, 09:44
|- - jcxz   Цитата(krux @ May 17 2017, 11:44) А вариа...   May 17 2017, 10:25


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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 04:57
Рейтинг@Mail.ru


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