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

 
 
> Выдать из функции указатель на ее статическую переменную
ViKo
сообщение Dec 5 2014, 10:26
Сообщение #1


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

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



В функции преобразую строку в число, и хочу выдать указатель на это число, если оно получилось из строки, и NULL, если в строке галимотня.
Можно определить глобальную int32_t переменную, в которую преобразовывать строку, и выдавать указатель на нее. Не нравится, что переменная глобальная.
Могу ли создать статическую переменную внутри функции, и выдавать указатель на нее?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
_pv
сообщение Dec 5 2014, 10:45
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



да можно конечно, только вот зачем?
использовать нулевой указатель в качестве индикатора ошибки что строка плохая? не надо так делать.

int * func(const char * str){
static int num = 0;
if (!str) return 0;
num = atoi(str);
return #
}
Go to the top of the page
 
+Quote Post
ViKo
сообщение Dec 5 2014, 10:54
Сообщение #3


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

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



Цитата(_pv @ Dec 5 2014, 13:45) *
да можно конечно, только вот зачем?
использовать нулевой указатель в качестве индикатора ошибки что строка плохая? не надо так делать.

int * func(const char * str){
static int num = 0;
if (!str) return 0;
num = atoi(str);
return #
}

Да, именно, для индикации ошибки. А чем плохо? atoi при неправильной строке выдает неопределенное значение. Мне это не подходит. Свое преобразование буду делать.

Цитата(adnega @ Dec 5 2014, 13:48) *
Либо передавать указатель в функцию, либо передавать результат в возвращаемом значении.
Глобальная переменная, а уж тем более локальная переменная (пусть даже и static) - неоправданно для такого функционала.
Вроде, есть стандартные функции для перевода строки в число. Чем они не устраивают?

А что мне выдаст atoi("XPEN_TEBE!") ? rolleyes.gif И как я об этом узнаю? Можно bool OK выдать, но все равно ссылку на результат нужно (ну, да, глобальную переменную можно).
Go to the top of the page
 
+Quote Post
SM
сообщение Dec 5 2014, 11:09
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(ViKo @ Dec 5 2014, 13:54) *
А что мне выдаст atoi("XPEN_TEBE!") ? rolleyes.gif И как я об этом узнаю?

Для этого более продвинутая strtol есть.

А вообще, в старые добрые времена, для этого глобальная переменная "errno" была. Чтобы за собой всякие коды ошибок сообщать. Чем такой подход не устроил? сделать my_errno
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ViKo   Выдать из функции указатель на ее статическую переменную   Dec 5 2014, 10:26
- - Mc_off   При вызове функции передавайте туда указатель на в...   Dec 5 2014, 10:35
- - ViKo   Если переменная внутри функции не статическая, то ...   Dec 5 2014, 10:39
|- - adnega   Цитата(ViKo @ Dec 5 2014, 14:39) Если пер...   Dec 5 2014, 10:48
- - AlexandrY   Цитата(ViKo @ Dec 5 2014, 12:26) В функци...   Dec 5 2014, 11:19
- - CrimsonPig   Цитата(ViKo @ Dec 5 2014, 10:26) В функци...   Dec 5 2014, 11:20
- - ViKo   Вижу, вариантов много. Но не вижу лучшего.   Dec 5 2014, 11:31
|- - SM   Цитата(ViKo @ Dec 5 2014, 14:31) Вижу, ва...   Dec 5 2014, 11:33
||- - ViKo   Цитата(SM @ Dec 5 2014, 14:33) Сделайте к...   Dec 5 2014, 12:11
||- - SM   Цитата(ViKo @ Dec 5 2014, 15:11) Функция ...   Dec 5 2014, 12:18
||- - AlexandrY   Цитата(SM @ Dec 5 2014, 14:18) Так тогда ...   Dec 5 2014, 12:30
|||- - SM   Цитата(AlexandrY @ Dec 5 2014, 15:30) str...   Dec 5 2014, 12:34
|||- - ViKo   Цитата(AlexandrY @ Dec 5 2014, 15:30) Но ...   Dec 5 2014, 12:34
||- - ViKo   Цитата(SM @ Dec 5 2014, 15:18) Так тогда ...   Dec 5 2014, 12:33
||- - SM   Цитата(ViKo @ Dec 5 2014, 15:33) Правильн...   Dec 5 2014, 12:38
||- - ViKo   Цитата(SM @ Dec 5 2014, 15:38) Теоретичес...   Dec 5 2014, 12:40
||- - SM   Цитата(ViKo @ Dec 5 2014, 15:40) Ок! ...   Dec 5 2014, 12:42
||- - ViKo   Цитата(SM @ Dec 5 2014, 15:42) Только не ...   Dec 5 2014, 12:46
|||- - SM   Цитата(ViKo @ Dec 5 2014, 15:46) Разбор с...   Dec 5 2014, 12:48
||- - ViKo   Кстати, как это слово правильно использовать, пере...   Dec 5 2014, 12:51
||- - SM   Цитата(ViKo @ Dec 5 2014, 15:51) Кстати, ...   Dec 5 2014, 13:19
||- - ViKo   Цитата(SM @ Dec 5 2014, 16:19) Поток, это...   Dec 5 2014, 13:23
|- - CrimsonPig   Цитата(ViKo @ Dec 5 2014, 11:31) Вижу, ва...   Dec 5 2014, 11:38
- - dxp   Возвращать результат из функции, храня его во внут...   Dec 5 2014, 15:23
- - ViKo   Я же указатель возвращаю, не сам объект. И указате...   Dec 5 2014, 15:25
|- - Сергей Борщ   Цитата(ViKo @ Dec 5 2014, 17:25) Работает...   Dec 5 2014, 18:25
|- - ViKo   Цитата(Сергей Борщ @ Dec 5 2014, 21:25) В...   Dec 6 2014, 12:24
- - Slash   Указатель на переменную успеха/неудачи передавать ...   Dec 5 2014, 19:16
- - _Pasha   bool или нет, но Кодunsigned char str2int32(in...   Dec 6 2014, 16:08


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

 


RSS Текстовая версия Сейчас: 9th August 2025 - 01:35
Рейтинг@Mail.ru


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