Можно ли использовать static-переменную типа char [10], задекларированную в теле функции, для формирования в ней строки, которую должна возвращать функция. Речь идет об embeded.
Здравствуйте, Hard_Club, Вы писали:
H_C>Можно ли использовать static-переменную типа char [10], задекларированную в теле функции, для формирования в ней строки, которую должна возвращать функция. Речь идет об embeded.
платформа платформе рознь, зависит от того, в какую секцию компилятор поместит этот буфер.
Но если он не константный, то он и не должен в константном сегменте лежать.
Здравствуйте, Hard_Club, Вы писали:
H_C>Можно ли использовать static-переменную типа char [10], задекларированную в теле функции, для формирования в ней строки, которую должна возвращать функция. Речь идет об embeded.
Сколько у вас потоков? Не лучше ли функции вернуть std::string или std::wstring? Или принимать на вход указатель на буфер и размер буфера и заполняет его?
Здравствуйте, Hard_Club, Вы писали:
H_C>Можно ли использовать static-переменную типа char [10], задекларированную в теле функции, для формирования в ней строки, которую должна возвращать функция. Речь идет об embeded.
Если функция не будет вызываться из разных потоков, то можно. Однако нормальные люди так не пишут
Здравствуйте, jazzer, Вы писали:
J>Здравствуйте, Hard_Club, Вы писали:
H_C>>Можно ли использовать static-переменную типа char [10], задекларированную в теле функции, для формирования в ней строки, которую должна возвращать функция. Речь идет об embeded.
J>платформа платформе рознь, зависит от того, в какую секцию компилятор поместит этот буфер. J>Но если он не константный, то он и не должен в константном сегменте лежать.
Здравствуйте, abdab, Вы писали:
A>Здравствуйте, Hard_Club, Вы писали:
H_C>>Можно ли использовать static-переменную типа char [10], задекларированную в теле функции, для формирования в ней строки, которую должна возвращать функция. Речь идет об embeded.
A>Если функция не будет вызываться из разных потоков, то можно. Однако нормальные люди так не пишут :)
Здравствуйте, Hard_Club, Вы писали:
H_C>Можно ли использовать static-переменную типа char [10], задекларированную в теле функции, для формирования в ней строки, которую должна возвращать функция. Речь идет об embeded.
можно, если только функция не должна быть reentrant и/или thread-safe
Здравствуйте, jazzer, Вы писали:
J>Здравствуйте, Hard_Club, Вы писали:
J>>>Но если он не константный, то он и не должен в константном сегменте лежать.
H_C>>что такое константный сегмент?
J>сорри, оговорился. read-only.
Здравствуйте, Hard_Club, Вы писали:
H_C>Можно ли использовать static-переменную типа char [10], задекларированную в теле функции, для формирования в ней строки, которую должна возвращать функция. Речь идет об embeded.
Можно с тремя оговорками:
1. Если вы в char[10] засунете строку из 20-и байт, случится чего-нибудь нехорошее
2. Если в вашей программе больше одного потока, они могут подраться за этот буфер
3. Рано или поздно вы наткнетесь на ситуацию, когда функция, возвращающая строку через этот буфер, захочет позвать другую функцию, которая тоже использует этот буфер. Тогда вы столкнетесь с проблемой, упомянутой в пункте 2, даже в одном потоке.
On 12.08.2011 12:04, Hard_Club wrote: > Можно ли использовать static-переменную типа char [10], задекларированную в теле > функции, для формирования в ней строки, которую должна возвращать функция. Речь > идет об embeded.
On 12.08.2011 13:43, Hard_Club wrote:
> A>Если функция не будет вызываться из разных потоков, то можно. Однако > нормальные люди так не пишут > > Уже решили отказаться от этой идеи.
Здравствуйте, Pzz, Вы писали: Pzz>3. Рано или поздно вы наткнетесь на ситуацию, когда функция, возвращающая строку через этот буфер, захочет позвать другую функцию, которая тоже использует этот буфер. Тогда вы столкнетесь с проблемой, упомянутой в пункте 2, даже в одном потоке.
А для этого случая можно завести массив буфферов (размером, заведомо большим количества одновременно используемх результатов функции) и использовать их циклически. Если только эта функция не используется в рекурсии (но и тут можно оценить максимальную глубину).
Понятно, что использовать с осторожностью, ведь ошибку нельзя отдетектить, но эффективность иногда стоит того.
Здравствуйте, gegMOPO4, Вы писали:
MOP>А для этого случая можно завести массив буфферов (размером, заведомо большим количества одновременно используемх результатов функции) и использовать их циклически. Если только эта функция не используется в рекурсии (но и тут можно оценить максимальную глубину).