Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.03.2013, 16:55   #11
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,322
По умолчанию

ROD, не знаю, по каким причинам отговаривает _Bers, но у нас, например, дефайны запрещены по кодстайлу:
Цитата:
5.2. Для определения констант целых типов не разрешается использовать ни директиву #define, ни квалификатор const. Все целые константы должны определяться с помощью ключевого слова enum и иметь осмысленные имена.



4.2. Перечислимые типы

Определения перечислимых типов оформляются следующим образом:

Код:
enum Colours
{
    RED,
    GREEN
};
или следующим образом:
Код:
typedef enum Colours
{
    RED,
    GREEN
} Colours;
Допускается использование анонимных перечислений:

Код:
enum
{
    READY_BIT = 0x1,
    ERROR_BIT = 0x2
};
Если определяется единственная константа, допускается запись анонимного перечисление в одной строке:

Код:
enum { BUFFER_SIZE = 1024 };
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 03.03.2013, 13:11   #12
MihalNik
МегаМодератор
СуперМодератор
 
Регистрация: 27.11.2012
Сообщений: 5,672
По умолчанию

Цитата:
Если определяется единственная константа, допускается запись анонимного перечисление в одной строке
А вот это уже маразм

Куча дублирующих литералов, куча ветвлений (switch'и не многим лучше if'ов).
Почему в кейсах столько одинакового кода?
Требуется декомпозиция (возможно, выделение небольших функций).
Еще неплохо было бы освоить массивы (в т.ч. массивы строк и функций).
А по какому принципу расставлены endl'ы и \n'ы? Чем они отличаются и что лучше?
Благими намерениями устлана дорога на programmersforum.ru
MihalNik вне форума Ответить с цитированием
Старый 03.03.2013, 13:28   #13
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от ROD Посмотреть сообщение
А, если не секрет, по чему?
Дефайны не дают типо-защиты, и не предохраняют от конфликтов имет.

Я использую енумы, как константы гарантированно времени компиляции.
(под значения енума гарантированно не будет выделено памяти).

Если мне не требуются переменные типа енума, то я использую безымянные енумы.
_Bers вне форума Ответить с цитированием
Старый 03.03.2013, 14:23   #14
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Цитата:
Сообщение от MihalNik Посмотреть сообщение
А вот это уже маразм
А по какому принципу расставлены endl'ы и \n'ы? Чем они отличаются и что лучше?
endl осуществляет перевод на новую строку так, как это нужно в данной системе.

Т.е. в одном случае endl это "\n", в другом это "\r\n".
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Старый 03.03.2013, 15:19   #15
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от ROD Посмотреть сообщение
endl осуществляет перевод на новую строку так, как это нужно в данной системе.

Т.е. в одном случае endl это "\n", в другом это "\r\n".
А я всегда думал, что нет никакой разницы между:
Код:
cout<< '\n';
и
Код:
cout<< endl;
И что за сигнал, что нужно перевести каретку на новую строку отвечает символ перевода каретки на новую строку: '\n'
А о том, как это правильно сделать в рамках конкретной системы, отвечает реализация стрима этой системы.
_Bers вне форума Ответить с цитированием
Старый 03.03.2013, 15:33   #16
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,322
По умолчанию

Кстати, endl, вроде как, еще и выталкивает все из буфера (насильственный сброс буфера буферизованного вывода без ожидания переполнения).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 03.03.2013, 17:06   #17
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Пардонте, я перепутал символы местами...
Правильно будет "\n\r" (это, к стати, в Widnows).
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Старый 03.03.2013, 18:19   #18
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от ROD Посмотреть сообщение
Пардонте, я перепутал символы местами...
Правильно будет "\n\r" (это, к стати, в Widnows).
Для студийной версии функция имеет вид:

Код:
_CRTIMP2_PURE inline basic_ostream<char, char_traits<char> >&
	__CLRCALL_OR_CDECL endl(basic_ostream<char, char_traits<char> >& _Ostr)
	{	// insert newline and flush byte stream
	_Ostr.put('\n');
	_Ostr.flush();
	return (_Ostr);
	}
Из чего я делаю вывод, что единственное различие между endl и '\n' только в том, что endl флюшит стримовский rdbuf:

Код:
_Myt& __CLR_OR_THIS_CALL flush()
		{	// flush output stream
		ios_base::iostate _State = ios_base::goodbit;
		if (!ios_base::fail() && _Myios::rdbuf()->pubsync() == -1)
			_State |= ios_base::badbit;	// sync failed
		_Myios::setstate(_State);
		return (*this);
		}
_Bers вне форума Ответить с цитированием
Старый 03.03.2013, 18:24   #19
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение
Дефайны не дают типо-защиты,
#define NAME (type(value))
Вот вам и типозащита.
enum удобно использовать там, где нужен один аргумент из всех. Если же надо делать битмаску из нескольких, enum мгновенно преващается в int и все теряется. Если нужна такая типозащита, тогда нужно не enum а собственный класс.
waleri вне форума Ответить с цитированием
Старый 03.03.2013, 19:05   #20
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
#define NAME (type(value))
Вот вам и типозащита.
enum удобно использовать там, где нужен один аргумент из всех. Если же надо делать битмаску из нескольких, enum мгновенно преващается в int и все теряется. Если нужна такая типозащита, тогда нужно не enum а собственный класс.
Нефига ничего не понял. Что это за дефайн такой? И как его использовать? И нафига он вообще нужен?

Единственное, что я понял из такого дефайна, это что любое упоминание
NAME у меня заменится на непонятное (type(value)) что приведет к ошибке компиляции.

Кстати, я использую иенно енумы для задания многочисленных флагов состояний:

Код:
enum eSTATE
{
   eHIDE  = 1<<0,
   eMOVE  = 1<<1,
   eBLINK = 1<<2,
}
 ....

CFlag flags(eHIDE|eMOVE );
...

if(flags == eHIDE) std::cout<<"объект невидим\n";
if(flags == eMOVE ) std::cout<<"объект двигается\n";
if(flags == eBLINK ) std::cout<<"объект мигает\n";

...

flags.SetFlag(eBLINK ); //поджигаем ещё один флаг
flags.UnSetFlag(eHIDE|eBLINK ); //тушим указанные флаги

...
CFlag упаковывает входящие константы в обычный беззнаковый int
Что позволяет запоминать до 32 возможных комбинаций флагов.

Как бы ничего революционно сложного, зато очень удобно и читабельно получается.
А ещё, енумы гарантированно не потребляют память. И такие константы можно эксплуатировать в шаблоном метапрограммировании

Последний раз редактировалось _Bers; 03.03.2013 в 19:24.
_Bers вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какие элементы кода могут тормозить загрузку моего сайта? Pyatachok HTML и CSS 3 08.11.2012 23:05
Хочу понять в чем ошибка моего кода FreeCat Общие вопросы C/C++ 11 09.06.2012 03:13
CreateRemoteThread и выполнение моего кода в чужом процессе Человек_Борща Win Api 4 11.05.2012 11:16
Прошу помощи в проверке моего перевода небольшого фрагмента кода от Си к делфи! SkAndrew Общие вопросы Delphi 11 16.08.2009 16:37
Ч чём ошибка моего кода сохранения и загрузки? AngelOfDeath Общие вопросы Delphi 3 08.04.2008 13:55