Перейти к содержанию
    

Возврат значения char */char const *

Во-первых - перегрузка.

И я писал в исходном сообщении, что это нежелательный путь, так как по сути - будут две одинаковые функции. Тогда уж лучше использовать вариант с inline одной из них.

Что мешает объединить? Т.е. перегруженная функция, которая просто является inline-const-оберткой для второй? Кроме принципиального нежелания переименовывать исходник .c->.cpp других препятствий не видно. Видно стойкое желание колоться, плакать, но продолжать кушать кактус.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что мешает объединить? Т.е. перегруженная функция, которая просто является inline-const-оберткой для второй? Кроме принципиального нежелания переименовывать исходник .c->.cpp других препятствий не видно. Видно стойкое желание колоться, плакать, но продолжать кушать кактус.

Я уже писал выше, что. То что inline-тся оно будет только при уровне оптимизации High.

Ничего страшного конечно, но ведь само inline - оно по любому опционально для компилятора. Т.е. - он может в любом случае понаделать лишних переходов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ничего страшного конечно, но ведь само inline - оно по любому опционально для компилятора. Т.е. - он может в любом случае понаделать лишних переходов.

Патологический перфекционизЬм детектед! Срочно вызывайте санитаров :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Под рукой нет компилятора, но, на мой взгляд, было бы хорошо подумать над передачей не указателя, а указателя на указатель:

int Func(const char **str)

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

 

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

Изменено пользователем Arlleex

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Под рукой нет компилятора, но, на мой взгляд, было бы хорошо подумать над передачей не указателя, а указателя на указатель:

И сделать текст исходника ещё более громоздким? И получить более громоздкий скомпилированный код?

Если было например:

char const *s; ... ; s = (char const *)StrFunc(s + 5);

то теперь будет ещё более громоздкая запись с сохранением в промежуточную переменную перед вызовом и чтением из неё - после.

Получим гораздо более развесистый текст. А уж код какой получится!.... Вместо простого ADDS R0, Rx, #5 перед вызовом, теперь будет: выделение места на стеке + запись в стек (s+5) + чтение из памяти внутри функции + удаление стекового фрейма после вызова функции - команд получается в несколько раз больше.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...