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

 
 
> CPP enum с минусовыми значениями, насколько это правильно
k155la3
сообщение May 25 2017, 06:25
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Вопрос касается кода возврата функции, а именно удачно или нет она отработала.
Если плюс - удачно, информация в коде возврата - справочная.
Если минус - критичная ошибка, ф-ия не отработала.

(?) Насколько такой подход (с отрицательным enum) правильный-феншуйный-политкорректный ?

ps - minus_4 итд приведено для наглядности, в реале - ест-но - там симв. имя ошибки вроде eErr_ADC_Ready

А реализовал так:
Код
enum TEnum
{
    minus_4 = -4,
    minus_3,
    minus_2,
    minus_1,
    null_0 = 0,
    plus_1,
    plus_2,
    plus_3,
    plus_4
} my_enum;

. . .

int MyFun(void) {    ... ... ...   return(minus_2); ..... .... return(plus_3); }

. . .

RetCode = MyFun();

if( RetCode > 0 )
{
   . . . .  ошибок нет, в RetCode в инф. о статусе выполнения.
}
else  // минусы и 0
{
   . . . .  разбор ошибок
}


Сообщение отредактировал k155la3 - May 25 2017, 07:20
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
x893
сообщение May 25 2017, 16:36
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



По смыслу - enum это набор неизменяемых именованных значений, по умолчанию int, но можно и другого.
А вель можно еще её сделать типом и использовать в параметрах, тогда людям понятнее что передается и что возращается.
int Foo(..);
или
ERROR_STATUS Foo(...)

А разве это не написано в книжках ?

#define можно переопределить, а enum не получится.
Go to the top of the page
 
+Quote Post
jcxz
сообщение May 25 2017, 20:47
Сообщение #3


Гуру
******

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



Список ошибок часто определяю так:
enum {ERR_1 = 1, ERR_2, ERR_3, ERR_n}; //ну или от 0
А уж возврат ошибочного значения из функции тогда или:
return ERR_...;
или:
return -ERR_...;
А если нужно возвращать из функции или данный код ошибки или корректное состояние, заданное тоже enum-ом, то делаю иногда так:
enum {OK_0, OK_1, OK_2, OK_n};
return (int)OK_1; //корректное завершение с кодом OK_1
return (int)OK_n + (int)ERR_1 - 1; //завершение с ошибкой ERR_1
Т.е. - возвращаются всегда положительные значения. Для Thumb2 такой способ оптимальнее. cool.gif Кто знает асм - поймёт.

Цитата(k155la3 @ May 25 2017, 12:35) *
Оставшиеся 12 разрядов можно использовать для любой полезной инф - битовые флаги, поля итд. Фактически - структура.

Если нужно вернуть 2 параметра, то лучше и возвращать их как 2, а не лепить из них одно в точке return, и не распаковывать потом в точке вызова.
Если мне нужно например на 32-битной архитектуре вернуть 2 значения из функции, я делаю так:
u64 FuncA() {
u64 q = (u32)val1 | (u64)(u32)val2 << 32;
return q;
}
Если пытаться всё лепить в одно 32-битное значение, то будет куча лишних команд при упаковке и потом - при распаковке. А в вышеприведённом случае - минимум команд.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- k155la3   CPP enum с минусовыми значениями   May 25 2017, 06:25
- - novikovfb   Почему бы и нет. Одно не понятно: чем запись minu...   May 25 2017, 06:32
|- - k155la3   Цитата(novikovfb @ May 25 2017, 09:32) По...   May 25 2017, 06:35
- - _pv   Цитатаinteger constant expression whose value is r...   May 25 2017, 07:22
|- - k155la3   "integer constant expression whose value is r...   May 25 2017, 07:32
|- - AlexRayne   Цитата(k155la3 @ May 25 2017, 11:32) Инте...   May 25 2017, 09:46
|- - k155la3   Цитата(AlexRayne @ May 25 2017, 12:46) . ...   May 25 2017, 10:35
||- - AlexRayne   Цитата(k155la3 @ May 25 2017, 14:35) (1) ...   May 25 2017, 12:27
|- - Сергей Борщ   QUOTE (AlexRayne @ May 25 2017, 12:46) Ме...   May 25 2017, 12:47
|- - k155la3   Цитата(Сергей Борщ @ May 25 2017, 15:47) ...   May 26 2017, 07:25
- - AnatolyT   Постоянно применяю, только не enum, а int. Обычная...   May 25 2017, 08:00
|- - k155la3   Цитата(AnatolyT @ May 25 2017, 11:00) . ....   May 25 2017, 08:47
- - AnatolyT   Непонятно какие преимущества дает использование en...   May 26 2017, 09:11
|- - novikovfb   Цитата(AnatolyT @ May 26 2017, 13:11) Неп...   May 26 2017, 09:46
||- - Сергей Борщ   QUOTE (novikovfb @ May 26 2017, 12:46) пр...   May 26 2017, 09:54
|- - k155la3   Цитата(AnatolyT @ May 26 2017, 12:11) Неп...   May 26 2017, 10:01
|- - jcxz   Цитата(k155la3 @ May 26 2017, 12:01) Кром...   May 28 2017, 10:26
- - sigmaN   По-моему идеально использовать enum по возможности...   May 26 2017, 10:10
|- - AlexRayne   Цитата(sigmaN @ May 26 2017, 13:10) Кодty...   May 26 2017, 13:33
|- - k155la3   Цитата(AlexRayne @ May 26 2017, 16:33) si...   May 26 2017, 14:38
- - AnatolyT   Может быть чтобы не было соблазна добавить в начал...   May 26 2017, 10:25
- - sigmaN   ЦитатаМожет быть чтобы не было соблазна добавить в...   May 26 2017, 10:58
- - sigmaN   Цитатаа почему Вы большими буквами значения енума ...   May 26 2017, 15:45
|- - dxp   QUOTE (sigmaN @ May 26 2017, 22:45) да эт...   May 27 2017, 05:21
|- - AlexRayne   Цитата(dxp @ May 27 2017, 09:21) Скорее н...   May 29 2017, 07:42
- - sigmaN   Кстати вы заметили, как в С++11 поправили enum? Я ...   May 28 2017, 09:13
|- - dxp   QUOTE (sigmaN @ May 28 2017, 16:13) Кстат...   May 28 2017, 13:02
- - sigmaN   ЦитатаThe enum type The compiler will use the smal...   May 28 2017, 11:17
|- - jcxz   Цитата(sigmaN @ May 28 2017, 13:17) The c...   May 29 2017, 08:35
- - sigmaN   ЦитатаТолько enum class - это, я понял, как раз со...   May 28 2017, 13:50
- - sigmaN   Ну тогда надо конкретизировать на примерах. Я так...   May 29 2017, 08:55
|- - jcxz   Цитата(sigmaN @ May 29 2017, 10:55) Я так...   May 29 2017, 09:34
- - sigmaN   Вот и я гворю: уточнять надо. Кто куда и кого расш...   May 29 2017, 10:10


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

 


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


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