![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| tatan |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 70 Регистрация: 31.10.2007 Репутация: нет Всего: 1 |
Добрый день.
Я новичок в C++, работал с Delphi, на C не писал. Читаю Либерти - Освой самостоятельно С++ за 21 день. Решил попробовать для тренировки написать простой класс для работы с dbf. Буду очень благодарен за замечания к моему коду: ошибки, неверные подходы, скрытые угрозы, реализация чере ж..., таких косяков думаю здесь много. Вообще, C++ понравился очень, возможности впечатляют, но иногда некоторые простые вещи не понятно как делать, например работа с char. Делалось все в Dev-C++ 4.9.9.2. Исходники присоединены. Заранее спасибо за любые комментарии. Присоединённый файл ( Кол-во скачиваний: 20 )
dbf.rar 4,33 Kb |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
а может просто небольшой кусок кода или функцию выкинешь, что тебя смущает?
тока не огромное полотно, а кусок. мне, к примеру, лень качать, запускать Dev-C++ 4.9.9.2.... |
|||
|
||||
| tatan |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 70 Регистрация: 31.10.2007 Репутация: нет Всего: 1 |
Поскольку мало что понимаю что хорошо-плохо хочется комментарий по всему коду, там немного, строк 200
компилиться и в TC++ |
|||
|
||||
| GrayCardinal |
|
|||
|
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 2 Всего: 58 |
Не разраривается
Это сообщение отредактировал(а) GrayCardinal - 6.11.2007, 16:44 |
|||
|
||||
| tatan |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 70 Регистрация: 31.10.2007 Репутация: нет Всего: 1 |
||||
|
||||
| GrayCardinal |
|
|||
|
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 2 Всего: 58 |
tatan,
Так, на вскидку : 1. if не надо закрывать точкой с запятой. 2. Определение класса должно быть в хэйдере.
Лучше сделать "inline" (в каждую строчку, в начало). И тоже последние ";" не нужны. 3. for тоже не надо ";" в конце. 4. Рекомендую { ставить в той же строчке, что и оператор. 5. Все переменные должны быть в начале функции. Вроде всё |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
unrar есть С-стиль, весьма спорно. |
|||
|
||||
| GrayCardinal |
|
||||
|
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 2 Всего: 58 |
Изварт чистейшей воды. Проще так (на коленке):
Добавлено через 48 секунд JackYF, Ничего спорного. Спросили как надо, я ответил Добавлено через 1 минуту и 15 секунд JackYF, Унрар есть, я в курсе. |
||||
|
|||||
| tatan |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 70 Регистрация: 31.10.2007 Репутация: нет Всего: 1 |
to GrayCardinal
Все принято, большое спасибо Ну кроме про "{", но это кажется к области религиозных войн с sprintf - о как, не придумал бы сам-то, согласен у меня изврат, я долго думал как записать строку формата |
|||
|
||||
| GrayCardinal |
|
|||
|
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 2 Всего: 58 |
Далее. Указатели, перед тем как их удалять лучше проверять на NULL. И соответственно, после удаления присваивать NULL - для гарантии что не удалишь два раза один и тот же указатель.
Добавлено через 1 минуту и 3 секунды tatan, Завсегда пожалуйста |
|||
|
||||
| tatan |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 70 Регистрация: 31.10.2007 Репутация: нет Всего: 1 |
Указатели кстати проверял
Но в предыдущей теме ктото сказал что проверка указателей на валидность почти ошибка в проектировании, все и убрал оставив на потом |
|||
|
||||
| GrayCardinal |
|
|||
|
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 2 Всего: 58 |
tatan,
Не читал тот флуд, но на нуль всегда проверяю. Так жить проще |
|||
|
||||
| tatan |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 70 Регистрация: 31.10.2007 Репутация: нет Всего: 1 |
Добавил в список рекомендаций - после удаления указателям присваивать NULL. "Так жить проще" (с)
|
|||
|
||||
| archimed7592 |
|
||||||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
А кто сказал, что так надо? А я рекомендую так не делать Ещё проще
Добавлено через 48 секунд
Нужно:
-------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
||||||
|
|||||||
| GrayCardinal |
|
|||
|
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 2 Всего: 58 |
archimed7592,
А передёргивать не надо |
|||
|
||||
| archimed7592 |
|
||||||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Добавлено через 46 секунд Ыыыы, где и чего я передёрнул? 0_о С чем ты не согласен? Добавлено через 1 минуту и 51 секунду
Проверка на 0 и проверка на валидность - разные вещи... Добавлено через 7 минут и 7 секунд
Нафиг нужно было заводить константы в .hpp, когда здесь проверяешь по значению? Добавлено через 8 минут и 59 секунд Ааа, и ещё: С++ - не Дельфи... В С++ можно реализовывать разные ф-ции в разных файлах, т.е., можно было бы хотя бы все определения dbfTable::* вынести в отдельный файл, а ещё лучше разбить его потом на несколько файлов(разделив связанные по смыслу ф-ции). -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
||||||
|
|||||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 17 Всего: 110 |
delete для нулевого указателя - вполне корректная операция -------------------- qqq |
|||
|
||||
| GrayCardinal |
|
|||
|
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 2 Всего: 58 |
И правда... Только вот с каких пор ? Точно помню что сегфолты ловил на таком |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
С оч древних - ещё в first edition(2003) было. Не знаю, как в ANSI-96(или какого он там года?). -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| GrayCardinal |
|
||||
|
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 2 Всего: 58 |
archimed7592,
maxim1000, А я долго не парился на эту тему
Добавлено через 1 минуту и 28 секунд
Так недавно ? |
||||
|
|||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
только, в частности, мелкософтский компилер тратит на "удаление" нулевого указателя гдето 11 тактов процессора вместо одной проверки, если напишешь сам GrayCardinal, ты когда-нить работал с большими переменными? зачем их объявлять в начале, если они по ходу дела могут не понадобиться? только время (процессорное) потратишь... или если переменная в конструкторе делает что-то немелкое по времени (к примеру, ищет сервер) |
|||
|
||||
| tatan |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 70 Регистрация: 31.10.2007 Репутация: нет Всего: 1 |
про "Еще проще" - записал
про const - запомнил Спасибо |
|||
|
||||
| GrayCardinal |
|
|||
|
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 2 Всего: 58 |
Alek86,
Если по ходу дела могут не понадобиться - лучше делать их динамическими. А если так, в центре функции, то читабельность стремится к нулю... Суть "объявления" переменных в начале - это просто меняется цифра в одной команде. А если в конструкторе что-то делается "долго", то опять таки лучше динамически ... Добавлено через 2 минуты и 50 секунд Alek86, О чём спорим ? Это сообщение отредактировал(а) GrayCardinal - 6.11.2007, 19:35 |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
ну, еще стек зря заполняется, если я правильно понимаю...
хотя, предупрежу, что тут я не эксперт и доводы привел не свои, а из "ленивого программирования"
чувствуется закоренелый сишник. с такими сиплюсплюсникам лучше не спорить - ато опять религ. война посреди темы разгорится Добавлено через 3 минуты и 40 секунд опять левый вопрос насколько позволительно с точки зрения "общепринятого стиля" инклудить cpp в другие cpp? или 1 cpp <-> 1 h ? |
|||
|
||||
| archimed7592 |
|
||||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Вот даже как... 0_о
Переменная должна быть как можно ближе к месту первого использования, а ещё лучше, если это возможно обернуть место её использования в отдельный scope. И ещё, как это читабельность может стремиться к нулю, если средний размер ф-ции 10-25 строк? И стражей(boost::mutex, к примеру)? Тоже динамически? А если исключение? Я вообще не помню, когда в последний раз писал delete(это я о том, что если я что-то динамически и выделяю, то есть нечто статическое(вроде shared_ptr), которое обязательно удалит это). -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
||||
|
|||||
| tatan |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 70 Регистрация: 31.10.2007 Репутация: нет Всего: 1 |
to archimed759:
"я бы добавил explicit к конструктору" - про explicit пока ничего не знаю.Буду читать. про копировщик и присваивание - записал, не знаю правда как это все сделать "char* itsTableName; // лучше использовать std::string" - здесь затупил, спасибо "fstream *itsTableFile; // зачем создавать поток динамически? 0_о" - извращение, уже понял "if (!itsTableFile) // не нужно ничего проверять - если new не удасться выделить память он бросит исключение" - так было в книжке, пока не читал про exception s, наверняка можно писать свои обработчики исключений, но это впереди "Нафиг нужно было заводить константы в .hpp, когда здесь проверяешь по значению?" - един-е объяснение - затупил to GrayCardinal: "А я долго не парился на эту тему smile" - пока эта конструкция с define не очень понятня, думаю разбирусь Спасибо |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Суть сказанного была не про исключения а про то, что new(в той форме в которой ты его написал) никогда не вернёт 0. -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| tatan |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 70 Регистрация: 31.10.2007 Репутация: нет Всего: 1 |
понял, и скорее всего в книжке было както так
|
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 17 Всего: 110 |
та я про free как-то и не говорил а в своём посте специально написал delete -------------------- qqq |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
И, тем не менее, free так же ничего не сделает в случае с нулевым указателем. -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| GrayCardinal |
|
|||
|
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 2 Всего: 58 |
Это откуда ? |
|||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
||||
|
||||
| GrayCardinal |
|
|||
|
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 2 Всего: 58 |
zkv,
Вот это для меня прописные истины Добавлено через 1 минуту и 11 секунд
|
|||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
||||
|
||||
| GrayCardinal |
|
|||
|
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 2 Всего: 58 |
zkv,
Уел таки |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
-------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| GrayCardinal |
|
|||
|
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 2 Всего: 58 |
archimed7592,
Может линк есть ? А то как-то неубедительно |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
35 правил, оч известная книга.
Добавлено через 38 секунд Номер главы не скажу, ибо сейчас у меня её под рукой нет. -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
archimed7592,
zkv, можно подробнее об этом я ничего такого не читал единственное для меня объяснение - это кэширование, т. е чем дальше определение переменной от точки использования, тем больше вероятность того, что данные, которые соответствуют переменной, не будут находится в кэше CPU Это сообщение отредактировал(а) MAKCim - 7.11.2007, 11:44 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
MAKCim, преждевременная оптимизация - корень всех зол
Кэш тут не при чём. Во-первых, сразу видно предназначение переменной, когда читаешь. Во-вторых, сужается её scope. В-третьих, раз уж мы заговорили про оптимизацию - компилятор всё равно выделит место в стеке под все нужные переменные в начале ф-ции, но, ему будет проще оптимизировать, когда он будет знать, что данная переменная фигурирует здесь(в данном scope) и не фигурирует нигде больше. -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
MAKCim, ты рассматриваешь все только с точки зрения оптимизации
принцип совета тот же, что и в совете избегать глобальных переменных по возможности. ведь можно отказаться от локальных переменных вообще, использовать только глобальные (забудем на время где там что храниться будет, смотрим только с точки зрения прозрачности кода) - нелегко будет разбирать такую программу. Это утрированный пример, но тенденция понятна, наверное? |
|||
|
||||
| SaDFromSpb |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 5.4.2006 Где: Санкт-Петербург Репутация: 3 Всего: 3 |
Вот скажи, а ядро Линуха до сих пор на си пишется? Там, типа, ООП не нужно? Совершенно без иронии, просто интересно. А ссылка с этими истинами, у меня не открывается что-то... -------------------- "За исключением части, касающейся потоков, библиотека Loki написана на стандартном языке С++. Увы, это означает, что многие современные компиляторы не смогут работать с ней в полном объеме." (А. Александреску. Modern C++ design. 2001) |
|||
|
||||
| MAKCim |
|
||||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
как это соотносится с этим
? EBP не меняется в пределах функции, так что, имхо, все равно, откуда обращаться к локальной переменной аналогия с глобальными переменными не уместна, имхо тогда уж и "разбрасывание" переменных по всему телу функции надо исключать немного все же причем Добавлено через 3 минуты и 44 секунды
пишется на С ООП - это синтаксический сахар в синтаксисе ЯВУ в общем случае он усложняет выходной код (соответственно, снижая его производительность), что неприемлемо для разработки ядра классы вполне заменяются структурами, методы - функциями, наследование - агрегированием, полиморфизм - ничем в виду его ненужности -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||||
|
|||||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
К примеру, если scope ограничен, он может вообще воспользоваться регистрами. Потом возьми умные объекты. mutex к примеру. Если ты сделаешь его в начале ф-ции, то всё время работы ф-ции мьютекс будет залочен, если же заключить его в тот scope в котором он реально нужен, то повысится эффективность. -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
мы говорим о расположении локальных переменных а лочить можно где угодно -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| UnrealMan |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
55 Если точнее: Эффективное использование C++. 55 верных советов улучшить структуру и код ваших программ Правило 26: Откладывайте определение переменных насколько возможно. Есть ещё в "Стандарты программирования на C++. 101 правило и рекомендация" (Герб Саттер, Андрей Александреску) 18. Объявляйте переменные как можно локальнее. |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
первый раз все равно идет чтение в регистр и неважно, где расположена при этом переменная -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
55 я начал читать, но когда понял, что это то же самое что и 35 читать стало лень(а в магазине сказали "они дополняют друг друга") MAKCim, в принципе ты можешь писать в стиле Си -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
archimed7592,
спасибо на самом деле я просто хочу разобраться
эх, если бы кто-нибудь здесь цитату привел а то искать лень -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| GrayCardinal |
|
|||
|
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 2 Всего: 58 |
SaDFromSpb,
ООП ? Да там проблемы какие-то с распределением памяти были... Да и на самом деле - не нужно оно для ядра... |
|||
|
||||
| UnrealMan |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
Аргументов 2: 1) производительность - в случае неиспользования переменных не должны зря вызываться конструкторы и деструкторы, 2) читабельность/самодокументируемость кода выше, когда переменная объявлена ближе к месту использования и инициализируется в месте объявления (хорошо видно, когда и для чего нужна переменная). Это сообщение отредактировал(а) UnrealMan - 7.11.2007, 14:24 |
|||
|
||||
| tatan |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 70 Регистрация: 31.10.2007 Репутация: нет Всего: 1 |
Внимательно все прочитал
Лично я наверное буду по-паскалевски объявлять переменные в начале а для лучшей читаемости кода давать переменным осмысленные имена, ну, видимо, это вера.у каждого подхода есть +- я получу аргументы в пользу той или иной доктрины Жалко, что мы отвлеклись. и если позволите еще важный вопрос, скоре всего из разряда RTFM но не получается у меня. Вынес описание класса в файл dbft.hpp, реализацию в файл dbft.cpp, создал проект с main() в файле dbfex.cpp. В файле dbft.cpp сделал #include "dbft.hpp", в файле dbfex.cpp - тоже. При компиляции получаю ошибку "In file included from dbfex.cpp" на строке #include "dbft.hpp" в файле dbft.cpp То есть видимо ругается что 2 раза включен Как надо правильно сделать? |
|||
|
||||
| zkv |
|
||||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
что то пока я не заметил ни одного плюса у предварительного объявления переменных защитить хедер от двойного подключения, добавь первой строкой
либо обрами весь код в хедере таким макросом:
Это сообщение отредактировал(а) zkv - 7.11.2007, 16:08 |
||||
|
|||||
| tatan |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 70 Регистрация: 31.10.2007 Репутация: нет Всего: 1 |
Пробовал оба варианта
Нет, наверное ругается по другому поводу ошибки в dbft.hpp дальше описываются - типа fstream does not name a type, и тд я правильно сделал включив в файл dbft.hpp строки ? #include <cstdlib> #include <iostream> #include <fstream> #include <vector> #include <string> #include <sstream> Без них собствено те же ошибки Блин Добавлено через 11 минут и 15 секунд Ура, заработало! инклюдить надо после using namespace std а то компилер ничего не находит Всем спасибо |
|||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
лучше не использовать - плохой тон из дежавю копировал, поэтому на форматирование не жаловаться
|
|||
|
||||
| SergeCpp |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 955 Регистрация: 8.8.2005 Где: At Home Репутация: 15 Всего: 124 |
Использовать EBP в качестве того, для чего он предназначен изначально — расточительство. Visual Studio 6, к примеру (Release), использует EBP как регистр общего назначения. Переменные адресуются по ESP (да, это сложнее, на то он и компилятор, чтобы справиться, он и справляется). Подозреваю, что и другие компиляторы не разбрасываются регистрами. |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
использование ESP, +1 байт к каждой инструкции расточительно, однако тут надо соблюдать равновесие между оптимизацией по скорости и размеру Добавлено через 3 минуты и 29 секунд zkv, спасибо за ссылку -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |