Re[5]: В чем прелесть замаскированного goto?
От: fk0 Россия https://fk0.name
Дата: 09.09.10 20:41
Оценка:
Здравствуйте, enji, Вы писали:

fk0>> Это не более, чем плохонькая замена вложенным и анонимным функциям. В нормальных языках оно искаропки есть.

E>Насколько я помню опыт дельфей, функция с кучей вложенных функций тоже далека от идеала ясности и легкости сопровождения.

Заставь дурака богу молиться...

E>Как вам могут помочь анонимные функции, я не понял.


Повысить читаемость говнокода.
Re[5]: В чем прелесть замаскированного goto?
От: fk0 Россия https://fk0.name
Дата: 09.09.10 20:42
Оценка:
Здравствуйте, dilmah, Вы писали:


fk0>> Для этого нужны вложенные фунцкии, как в паскале. Для одептов GCC и Delphi, для виндоморонов и C++ -- никак нельзя.

D>но в С++ есть локальные структуры.

В голом C тоже есть.
Re[6]: В чем прелесть замаскированного goto?
От: dilmah США  
Дата: 09.09.10 20:50
Оценка:
fk0>>> Для этого нужны вложенные фунцкии, как в паскале. Для одептов GCC и Delphi, для виндоморонов и C++ -- никак нельзя.
D>>но в С++ есть локальные структуры.

fk0> В голом C тоже есть.


но в голом С в этих структурах нет методов
Re[8]: В чем прелесть замаскированного goto?
От: Centaur Россия  
Дата: 10.09.10 04:28
Оценка: 1 (1) +1
Здравствуйте, CreatorCray, Вы писали:

CC>интересно, а например вот такие вот

CC>#define countof(array)                (sizeof (array)/sizeof (array[0]))

CC>пролезли бы?

Вот этот — точно нет. Потому что он даёт неправильный результат при вызове с указателем.

#include <iostream>
#include <ostream>

#define countof(array) (sizeof (array)/sizeof (array[0]))

int main()
{
    int array[3];
    int* ptr = array;
    std::cout << "array: " << countof(array) // 3
              << " ptr: " << countof(ptr) // implementation-defined, sizeof(int*)/sizeof(int)
              << "\n";
    return 0;
}


Писать нужно так, чтобы неправильное употребление было невозможно или сильно затруднено:

#include <iostream>
#include <ostream>

template <typename T, size_t N>
size_t countof(T (&)[N])
{
    return N;
}

int main()
{
    int array[3];
    int* ptr = array;
    std::cout << "array: " << countof(array) // 3
              << " ptr: " << countof(ptr) // compile-time error
              << "\n";
    return 0;
}


Заодно не засоряем пространство имён.
Re[11]: В чем прелесть замаскированного goto?
От: A.Lokotkov Россия http://www.linkedin.com/pub/alexander-lokotkov/a/701/625
Дата: 10.09.10 05:51
Оценка:
Здравствуйте, Erop, Вы писали:

E>Всё понимаю, но при чём тут do{ } while( 0 ); -- не понимаю


Конструкция do { sequence } while( condition ); определяет последовательность действий, выполняемую, как минимум, один раз и прерываемую break-ом всюду внутри. По крайней мере, в нашей группе разработчиков это предельно ясно всем.
В предыдущем сообщении я говорил
Автор: A.Lokotkov
Дата: 09.09.10
, что "в многостадийной инициализации в случае облома на фоне return-ов и goto легко забыть что-нибудь убрать за собой, освободить какой-нибудь ресурс и пр., что и произошло в данном случае". И я систематически встречаюсь с подобной goto-induced багом в стороннем коде. Более мне добавить нечего.

Если goto тебе и твоим коллегам кажется более понятной конструкцией, используйте goto на здоровье.
bloß it hudla
Re[9]: В чем прелесть замаскированного goto?
От: CreatorCray  
Дата: 10.09.10 06:56
Оценка:
Здравствуйте, Centaur, Вы писали:

C>
CC>>#define countof(array)                (sizeof (array)/sizeof (array[0]))
C>


C>Вот этот — точно нет. Потому что он даёт неправильный результат при вызове с указателем.

Увы, но отличить массив от указателя в С (не С++) нельзя никак.
Можно лишь ввести некоторую "защиту":
#define countof(array) (5 / ((sizeof(array) != sizeof(void*))?5:0), (sizeof(array)/sizeof(array[0])))


C>Писать нужно так, чтобы неправильное употребление было невозможно или сильно затруднено:

template <typename T, size_t N>
size_t countof(T (&)[N])
{
    return N;
}

Минус в том, что для С это не проканает.

PS. список был составлен из не зависящих друг от друга макросов. Т.е. там и С и С++ макросы
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[10]: В чем прелесть замаскированного goto?
От: Кондраций Россия  
Дата: 10.09.10 09:46
Оценка:
Здравствуйте, CaptainFlint, Вы писали:

CF>Здравствуйте, Erop, Вы писали:

...
CF>Э-э… Боюсь показаться необразованным дураком, но что не так в этом коде? Неоднократно встречал, да и сам использовал…
CF>/нервно оглядываюсь, ища куда бы заныкаться от неотвратимого гнева гуру/
По всей видимости речь идёт о:
1. накладных расходах при работе с ислючениями в С++.
2. неправильности использования исключений (в данном случае) для передачи управления. Например, в отладчике это исключение может ловится в то время, как никакой исключительной ситуации не наступило; обычная, заранее предусмотренная передача управления.
Сообщение заговорено потомственным колдуном, целителем и магом в девятом поколении!
Модерирование или минусование сообщения ведет к половому бессилию, венерическим заболеваниям, венцу безбрачия и диарее!
Re[11]: В чем прелесть замаскированного goto?
От: CaptainFlint Россия http://flint-inc.ru/
Дата: 10.09.10 10:50
Оценка:
Здравствуйте, Кондраций, Вы писали:

CF>>Э-э… Боюсь показаться необразованным дураком, но что не так в этом коде? Неоднократно встречал, да и сам использовал…

CF>>/нервно оглядываюсь, ища куда бы заныкаться от неотвратимого гнева гуру/
К>По всей видимости речь идёт о:
К>1. накладных расходах при работе с ислючениями в С++.
К>2. неправильности использования исключений (в данном случае) для передачи управления. Например, в отладчике это исключение может ловится в то время, как никакой исключительной ситуации не наступило; обычная, заранее предусмотренная передача управления.

1. ЕМНИП, если исключения не происходит, накладные расходы там мизерные. Во всяком случае, когда я в своей проге их замерял (для далеко не самых навороченных функций), разница в производительности оставалась в пределах погрешностей.
2. Ну, здесь как и с любым инструментом: если кто-то пихает его, где ни попадя, это значит, что плох программист, а не инструмент. Не знаю, я подобные try-catch применяю в таких случаях, как, например, проверка входных данных.
Почему же, ё-моё, ты нигде не пишешь «ё»?
Re[8]: В чем прелесть замаскированного goto?
От: Vamp Россия  
Дата: 10.09.10 15:13
Оценка: +2
N_>Полностью согласен Но реали таковы что приходится поддерживать код, который написан неидеально и встречаются длинные функции. Я предпочту встретить внем брейк, вместо гоуту неизвестно куда.
Вообще-то ровно наоборот. Найти, куда ведет готу — одно нажатие на шоткат поиска. Найти, где конец этого цикла — задача гораздо менее тривиальная.
Да здравствует мыло душистое и веревка пушистая.
Re: В чем прелесть замаскированного goto?
От: Vamp Россия  
Дата: 10.09.10 15:14
Оценка: +1
Нету прелести. И то, и другое есть образец плохого кодирования.
Да здравствует мыло душистое и веревка пушистая.
Re[12]: В чем прелесть замаскированного goto?
От: Кондраций Россия  
Дата: 10.09.10 17:16
Оценка:
Здравствуйте, CaptainFlint, Вы писали:

CF>1. ЕМНИП, если исключения не происходит, накладные расходы там мизерные. Во всяком случае, когда я в своей проге их замерял (для далеко не самых навороченных функций), разница в производительности оставалась в пределах погрешностей.

try {
    if( XXX ) {
        throw 666;
    if( YYY ) {
        throw 777;
    if( ZZZ ) {
        throw 888;
    } 
} catch( int rootOfEvil ) {
        // process XXX
}

Ветка под условием XXX наверняка не единственная; раз так — стоит ожидать более-менее единообразной обработки в разных if-ах. Сказать определённо нельзя, но в данном случае стоит ожидать, КМК, достаточно частого выброса исключений.
Еще одно — поддержка исключений в С++ требует линковки CRT.

CF>2. Ну, здесь как и с любым инструментом: если кто-то пихает его, где ни попадя, это значит, что плох программист, а не инструмент. Не знаю, я подобные try-catch применяю в таких случаях, как, например, проверка входных данных.

Ну тут много зависит, кроме желаний программиста, от:
1. возможностей библиотек, которые ты используешь (т.е. представляют ли они альтернативы исключениям);
2. прогнозируемой частоты неверных входных данных (если важна производительность).
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
Сообщение заговорено потомственным колдуном, целителем и магом в девятом поколении!
Модерирование или минусование сообщения ведет к половому бессилию, венерическим заболеваниям, венцу безбрачия и диарее!
Re[9]: В чем прелесть замаскированного goto?
От: Privalov  
Дата: 10.09.10 17:36
Оценка:
Здравствуйте, Vamp, Вы писали:

V>Вообще-то ровно наоборот. Найти, куда ведет готу — одно нажатие на шоткат поиска. Найти, где конец этого цикла — задача гораздо менее тривиальная.


Это если все писать в notepad-е. (Кстати, а где у него шорткат поиска?) Уже в notepad++ можно видеть границы блоков. А если еще и нормальную IDE взять, там блоки выделяются просто кликом в районе фигурной скобки.
Re[10]: В чем прелесть замаскированного goto?
От: Vamp Россия  
Дата: 10.09.10 17:39
Оценка:
P>Это если все писать в notepad-е. (Кстати, а где у него шорткат поиска?)
Ctrl-F с утра было. Но вообще-то должен заметить, что между notepad и IDE лежит чертова уйма редакторов. И далеко не всегда есть возможность пользоваться IDE.

P>А если еще и нормальную IDE взять, там блоки выделяются просто кликом в районе фигурной скобки.

Только надо еще начало блока найти для этого. А если блок не помещается на экран — это тоже не элементарно.
Да здравствует мыло душистое и веревка пушистая.
Re[7]: В чем прелесть замаскированного goto?
От: fk0 Россия https://fk0.name
Дата: 10.09.10 17:42
Оценка:
Здравствуйте, dilmah, Вы писали:


fk0>>>> Для этого нужны вложенные фунцкии, как в паскале. Для одептов GCC и Delphi, для виндоморонов и C++ -- никак нельзя.

D>>>но в С++ есть локальные структуры.
fk0>> В голом C тоже есть.
D>но в голом С в этих структурах нет методов

void (*TheMethodOfMyStructure)(void);
Re[11]: В чем прелесть замаскированного goto?
От: Privalov  
Дата: 10.09.10 18:01
Оценка:
Здравствуйте, Vamp, Вы писали:

V>Ctrl-F с утра было.


А, ну да. В пятницу вечером, да еще если не запускал его давненько, забыл.

V>Но вообще-то должен заметить, что между notepad и IDE лежит чертова уйма редакторов.


Т.е. относительно notepad++ возражений нет?

V>И далеко не всегда есть возможность пользоваться IDE.


А когда в нормальной работе нет возможности пользоваться IDE? Мне приходит в голову только древний Workbench от Microsoft на 80286. Правда, я не знаю положение дел на мэйнфреймах.


V>Только надо еще начало блока найти для этого. А если блок не помещается на экран — это тоже не элементарно.


Это достаточно просто. Нормальная IDE сама отмечает границы блоков.
Re[8]: В чем прелесть замаскированного goto?
От: dilmah США  
Дата: 10.09.10 18:38
Оценка:
fk0>>>>> Для этого нужны вложенные фунцкии, как в паскале. Для одептов GCC и Delphi, для виндоморонов и C++ -- никак нельзя.
D>>>>но в С++ есть локальные структуры.
fk0>>> В голом C тоже есть.
D>>но в голом С в этих структурах нет методов

fk0> void (*TheMethodOfMyStructure)(void);


хех Ну как минимум здесь ты платишь цену косвенного вызова, то есть это виртуальный метод С++, а не обычный.
Во-вторых, непонятно почему без аргументов, а не void (*TheMethodOfMyStructure)(struct tag* self);

Но я не понимаю о чем спор вообще? В С++ есть красивый способ кодирования: допустим тебе нужно написать мощную функцию/метод (которая делает что-то нетривиальное). Тогда внутри этой функции ты определяешь локальную структуру, которая будет "движком" этой функции, локальные переменные этой функции ты обычно затягиваешь внутрь этой структуры, чтобы методы структуры могли с ней работать. Ну и заодно десторуктор этой струткуры занимается освобождением ресурсов. В С такого стиля нет.
Re[12]: В чем прелесть замаскированного goto?
От: Vamp Россия  
Дата: 10.09.10 20:01
Оценка:
P>Т.е. относительно notepad++ возражений нет?
Никогда не пользовался.

P>А когда в нормальной работе нет возможности пользоваться IDE? Мне приходит в голову только древний Workbench от Microsoft на 80286. Правда, я не знаю положение дел на мэйнфреймах.

Например, мне неизвестна НОРМАЛЬНАЯ (в твоем понимании) IDE под Солярис. Тебе известна?

P>Это достаточно просто. Нормальная IDE сама отмечает границы блоков.

Будь ласка, перечисли нормальные ИДЕ
Да здравствует мыло душистое и веревка пушистая.
Re[2]: В чем прелесть замаскированного goto?
От: enji  
Дата: 11.09.10 08:40
Оценка: :)
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>В возможности устроить незамаскированный флейм.


Ну я ж не написал "В чем прелесть goto?"
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
Re[13]: В чем прелесть замаскированного goto?
От: Privalov  
Дата: 11.09.10 08:50
Оценка:
Здравствуйте, Vamp, Вы писали:

P>>Т.е. относительно notepad++ возражений нет?

V>Никогда не пользовался.

Попробуй.

V>Например, мне неизвестна НОРМАЛЬНАЯ (в твоем понимании) IDE под Солярис. Тебе известна?


NetBeans?

V>Будь ласка, перечисли нормальные ИДЕ


Какие у тебя критерии нормальности IDE? Как по мне, IDEA, Студия, тот же NetBeans, местами даже Eclipse... Во всяком случае средства, помогающие анализировать код, есть у всех.
Re[3]: В чем прелесть замаскированного goto?
От: Pavel Dvorkin Россия  
Дата: 11.09.10 16:09
Оценка: :))
Здравствуйте, enji, Вы писали:


PD>>В возможности устроить незамаскированный флейм.


E>Ну я ж не написал "В чем прелесть goto?"


И я не написал просто "флейм"
With best regards
Pavel Dvorkin
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.