powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / На чём лучше писать код при одинаковом количестве строк: на C или на C++?
25 сообщений из 474, страница 8 из 19
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492669
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlИзопропилWhite Owl,

print_odbc_error(SQL_HANDLE_STMT, TRUE);

процесс завершает?Да.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
/*** Helper function to report ODBC errors */
void print_odbc_error(SQLSMALLINT handle_type, int critical) {
	SQLHANDLE hndl;          // Just to avoid passing the actual handle into this function.
	SQLCHAR sql_state[6];    // SQLSTATE is always 5 characters. google "msdn ODBC Error Codes" for code explanations
	SQLINTEGER native_error; // error code as reported by the driver. Driver specific, therefore ignored here.
	SQLCHAR message_text[2048];
	SQLSMALLINT message_length;

	// choose the appropriate handle
	switch(handle_type) {
	case SQL_HANDLE_ENV: hndl=henv; break;
	case SQL_HANDLE_DBC: hndl=hdbc; break;
	case SQL_HANDLE_STMT: hndl=hstmt; break;
	default: finish_process("Incorrect usage of print_odbc_error().", 2);
	}

	// Since any call to ODBC and/or database can return multiple messages, we have to iterate through them
	SQLSMALLINT record_number=1;
	while(TRUE) {
		retcode = SQLGetDiagRec(handle_type, hndl, record_number,
				sql_state, &native_error, message_text, sizeof(message_text), &message_length);
		if(retcode != SQL_SUCCESS) break;
		if( message_text[--message_length]=='\n') message_text[message_length]=0;
		sprintf(buf, "[SQLSTATE=%s] %s", sql_state, message_text);
		write_to_log(buf);
		record_number++;
	}

	if(critical) {
		odbc_cleanup();
		finish_process("Unrecoverable ODBC error", 2);
	}
}



Дико извиняюсь, а зачем while (TRUE) ?
Почему не
Код: plaintext
1.
2.
	while(SQLGetDiagRec(handle_type, hndl, record_number,
				sql_state, &native_error, message_text, sizeof(message_text), &message_length) == SQL_SUCCESS) {



?

В свое время очень впечатлил пример рефакторинга кода Рихтера в progstone
http://progstone.narod.ru/reciprocality/r0/day2.html
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492693
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schiДико извиняюсь, а зачем while (TRUE) ?Затем, что:
Код: sql
1.
if (условие) break

удобнее, чем:
Код: sql
1.
2.
3.
if (другое_условие) {
  /// портянка кода
}

Особенно удобнее, если условий выхода - несколько и в разных местах.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492700
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schiДико извиняюсь, а зачем while (TRUE) ?Это потому, что в убогих сях, в отличие от правильного muLISPа, нет неявных PROGN-ов и неявных COND-ов, и из-за этого программирование сценариев "сначала частные случаи, потом более общие" требует костылей вроде фиктивного цикла с брейками.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492708
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_ruSiemarglпропущено...

Речь не об утечке памяти, ну откуда вы вообще эту тему взяли???
Исходный вопрос 20657004

Речь о гарантии того, что ваше приложение поместится в XXX Кб оперативки и в YYY Кб стека. При любых условиях.
И о предварительной оценке XXX/YYY по исходному набору данных, если используется STL.Для гарантии не надо мониторить, для гарантии надо считать.Выдохнул.

Еще раз, уже пятый. Спрашиваю.

ЕСТЬ СПОСОБ КАК ПОСЧИТАТЬ ???
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492716
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovschiДико извиняюсь, а зачем while (TRUE) ?Затем, что:
Код: sql
1.
if (условие) break

удобнее, чем:
Код: sql
1.
2.
3.
if (другое_условие) {
  /// портянка кода
}

Особенно удобнее, если условий выхода - несколько и в разных местах.

Фигасе. Хотелось бы услышать, чем, применительно к данному коду, синтаксис

Код: plaintext
1.
2.
3.
4.
5.
6.
while (TRUE) {
  foo := bar(......)
  if (foo) 
    break;
...
}



Удобнее, чем

Код: plaintext
1.
2.
3.
while (bar(....)) {
  ...
}
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492717
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_ruschiДико извиняюсь, а зачем while (TRUE) ?Это потому, что в убогих сях, в отличие от правильного muLISPа, нет неявных PROGN-ов и неявных COND-ов, и из-за этого программирование сценариев "сначала частные случаи, потом более общие" требует костылей вроде фиктивного цикла с брейками.

В убогих сях есть синтаксис оператора while, в описании этого синтаксиса не указано, что в скобках после while должно всегда стоять TRUE
(Специально открыл K&R)
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492718
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schiФигасе. Хотелось бы услышать, чем, применительно к данному кодуПерепишите на кошерный, с вашей точки зрения вариант и сравните.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492729
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schi:=
Злостный офтопик
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492731
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovskyschi:=
Злостный офтопик Шпейон спалилсо 0/

Всех с пятницей
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492741
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargliv_an_ruпропущено...
Для гарантии не надо мониторить, для гарантии надо считать.Выдохнул.

Еще раз, уже пятый. Спрашиваю.

ЕСТЬ СПОСОБ КАК ПОСЧИТАТЬ ???сначала смотрите оверхеды своего любимого аллокатора в статье про этот аллокатор. Потом складываете все вызовы аллокатора в один столбик, фарш на стеке в другой. В случае Оптерона, если ничего не путаю и если нужен контроль за приближающимся переполнением стека, то столбиков для стека понадобится два --- что растёт снизу вверх и что растёт сверху вниз. Тупо, нудно, лучше привлечь двух стажёров, чтобы каждый независимо от другого разметил комментариями код, строчку за строчкой, а потом meld-ом сравнить их результаты, и увидеть ошибки (ну, часть ошибок :)
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492812
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ладно. Я понял, что задал слишком сложный вопрос для этого форума и про доказательства алгоритмов никто не помнит.

Ушел читать
http://www.embedded.com/design/programming-languages-and-tools/4429790/How-to-make-C--more-real-time-friendly
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492832
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schiВ убогих сях есть синтаксис оператора while, в описании этого синтаксиса не указано, что в скобках после while должно всегда стоять TRUE (Специально открыл K&R)Я, периодически, использую иную форму:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
do
{
  ...
  if (...) break;
  ...
  if (...) break;
  ...
} while (false);
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492835
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devЯ, периодически, использую иную форму:а я стараюсь такие вещи в функцию выносить:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
{
  ...
  if (...) return false;
  ...
  if (...) return false;
  ...
};
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492838
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovskyschi:=
Злостный офтопик

"Но что-то его выдавало: то ли буденовка, то ли орден Ленина, то ли парашют, волочащийся за спиной."
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492853
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMb, менять простой "jmp near ptr" на "ret" там, где просто не хочется писать goto?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492896
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schiBasil A. Sidorovпропущено...
Затем, что:
Код: sql
1.
if (условие) break

удобнее, чем:
Код: sql
1.
2.
3.
if (другое_условие) {
  /// портянка кода
}

Особенно удобнее, если условий выхода - несколько и в разных местах.

Фигасе. Хотелось бы услышать, чем, применительно к данному коду, синтаксис

Код: plaintext
1.
2.
3.
4.
5.
6.
while (TRUE) {
  foo := bar(......)
  if (foo) 
    break;
...
}



Удобнее, чем

Код: plaintext
1.
2.
3.
while (bar(....)) {
  ...
}



Блин, ну чего ты привязался ?
Ну, захотелось ему так, что теперь ?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492907
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schiФигасе. Хотелось бы услышать, чем, применительно к данному коду, синтаксис
Код: plaintext
1.
2.
3.
4.
5.
6.
while (TRUE) {
  foo := bar(......)
  if (foo) 
    break;
...
}


Удобнее, чем
Код: plaintext
1.
2.
3.
while (bar(....)) {
  ...
}

Результаты работы второго варианта неидентичен первому.
Правильный вариант:
Код: plaintext
1.
2.
3.
4.
while ((bool)(foo = bar(...)))
{
  ...
}
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492915
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devCEMb, менять простой "jmp near ptr" на "ret" там, где просто не хочется писать goto?вопрос, конечно, философский. Но у тебя там блок обработки. Скорее всего, его можно логически выдернуть из кода. А тогда есть вероятность, что его можно оформить, как отдельную функцию. Ну и понятно, что вероятность второго меньше, чем вероятность первого.
Я в функции код выношу, чтобы не городить лишние if-ы и скоупы. Без фанатизма.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39493161
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMbWhite Owlв Java это "игнорирование исключения" опять таки надо явно прописывать, а в С++ просто "забываешь" про него.Вот это очень полезная штука в яве. Я не осилил перечитывать три страницы, но лучше, для структуры кода и читаемости, выкидывать исключения на одном уровне, а ловить на том же или следующем, и если надо, прокидывать (своё, новое) дальше. И в заголовке и теле функции писать, что она (не) выкидывает. С++ не обязует это делать, но позволяет. Тогда не надо будет лазить по всей иерархии классов и искать, какая зараза его бросила. Иначе исключениями код можно запутать гораздо хитрее, чем этими всеми вашими goto-ами. По сути, это те же goto, только в одну сторону, зато скакануть можно как угодно далеко.

А СОМ - это просто был пример полиморфизма, который в свою очередь - кусок ООП :)
Не совсем так. В java действует соглашение что обработать исключение
Можно только в том случае если на текущем уровне мы в состоянии
Принять какое то решение. В остальных случаях мы имеем право его
Бросить наверх.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39493173
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglЛадно. Я понял, что задал слишком сложный вопрос для этого форума и про доказательства алгоритмов никто не помнит.Если для вашего алгоритма уже есть даже доказанные оценки, зачем вы его вообще пишете?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39493190
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_ruSiemarglЛадно. Я понял, что задал слишком сложный вопрос для этого форума и про доказательства алгоритмов никто не помнит.Если для вашего алгоритма уже есть даже доказанные оценки, зачем вы его вообще пишете?Я понимаю, что не слишком подробно пишу, надеясь на понимание собеседников.

Но кажется, ты совсем не понял вопроса. Вопрос был про доказанные оценки для алгоритмов STL.

Все, самовыпиливаюсь...
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39493210
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargliv_an_ruпропущено...
Если для вашего алгоритма уже есть даже доказанные оценки, зачем вы его вообще пишете?Я понимаю, что не слишком подробно пишу, надеясь на понимание собеседников.

Но кажется, ты совсем не понял вопроса. Вопрос был про доказанные оценки для алгоритмов STL.

Все, самовыпиливаюсь...Там и доказывать нечего, абсолютно тупые же контейнеры, всё в Седжевике. Проблема не в стоимости "кирпичиков", а в "бухучёте", чтобы получить стоимость большого нагромождения этих "кирпичиков" в вашей программе. И эта работа абсолютно одинакова хоть для голого си, хоть для плюсов.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39493223
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schiВ свое время очень впечатлил пример рефакторинга кода Рихтера в progstone
http://progstone.narod.ru/reciprocality/r0/day2.html
Мне кажется что глубокие рассуждения о пользе или вреде нулевого факториала
ведут нас к базовым аксиомам чисел. (Старик Гёдель ехидно улыбается с портретов.)
Как определили функцию так она и "поплыла".

Ничего мы фундаментально не улучшим если даже лишим функцию области определения.
А если заставим ее быть равной нулю при x=0 то потеряем некую рекурретную
индуктивность. Во все формулы надо будет ввести if (...) которых защитит произведение
от внезапного обнуления.

Кроме того количество перестановок пустого множества предметов дает определенные
философские допущения, улучшающие картину мира.

Тоесть все вроде-бы логично. У нес есть ОДНА перестановка одного предмета.
И ОДНА перестановка пустого множества предметов.

Статью целиком не читал. Пробежал по диагонали. Жаль время терять на попытки
искать сенсацию где ее нет. Уж лучше копать уфологию там или историю шестой
расы. Продуктивнее будет.... мдя.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39493235
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyWhite OwlMasterZiv, Anatoly Moskovsky, а вы? Вы тоже частенько заявляете что код с исключениями проще и лучше. Можете сделать простой и элегантный аналог на исключениях для кода показанного в 20655972 ?
Прошу.Ну это уже можно читать...
Но "нэ, нэ нравится". Все же ODBC это изначально процедурная библиотека и если следовать показанному подходу, надо будет каждый вызов SQL* функции обернуть в отдельную функцию/метод типа:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SQLSMALLINT SQLNumResultCols_we () {
    SQLSMALLINT column_count = 0;

    retcode=SQLNumResultCols(m_hstmt, &column_count);

    if(!SQL_SUCCEEDED(retcode))
        throw sql_error(getErrorText());
    if(retcode == SQL_SUCCESS_WITH_INFO)
        LOG_DEBUG(getErrorText());

    return column_count;
}


То есть либо самому писать обертку, либо найти уже написаную кем-то.

А еще, в этом коде кучка ошибок :) Он не аналогичен моему...

Anatoly MoskovskyКраткое пояснение.
1) Отделено логирование SQL_SUCCESS_WITH_INFO от прикладного кода, которое там нафиг не нужно.Не согласен. В данном конкретном случае это было действительно оправдано. Кусочек кода маленький. Но в большой программе далеко не всегда нужно обращать внимание на SQL_SUCCESS_WITH_INFO. Во многих случаях эту информацию можно смело игнорировать, но если сделать обертку над функцией которая всегда делает отладочню печать - мы рискуем получить излишне перегруженный лог. Именно по этой причине я предпочитаю обращать внимание на SQL_SUCCESS_WITH_INFO только там где это действительно нужно.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39493236
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schiДико извиняюсь, а зачем while (TRUE) ?
Почему не
Код: plaintext
1.
2.
	while(SQLGetDiagRec(handle_type, hndl, record_number,
				sql_state, &native_error, message_text, sizeof(message_text), &message_length) == SQL_SUCCESS) {



?Потому что вызов этой функции уже очень длинный. Чисто для визуальщины - отдельно цикл, отдельно вызов функции, отдельно выход из цикла.
Можно конечно написать и так как ты предлагаешь - меньше строк будет, но...
Я просто предпочитаю не писать условие которое требует переноса на следующую сторку. Лучше уж завести несколько булевых переменных и вычислять их отдельно от if/while.
...
Рейтинг: 0 / 0
25 сообщений из 474, страница 8 из 19
Форумы / Программирование [игнор отключен] [закрыт для гостей] / На чём лучше писать код при одинаковом количестве строк: на C или на C++?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]