Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Заземлённые указатели 
:(
    Опции темы
ТарасАтавин
Дата 7.9.2013, 07:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 26.8.2013

Репутация: нет
Всего: нет



Цитата(bsa @  6.9.2013,  10:18 Найти цитируемый пост)
Нынче, это сделать сложно. Мы же в нотепадах пишем. А нормальная IDE отступ не поставит в этом случае.
Табуляция в любой IDE основана не на синтаксисе, а на том, в каких позициях начинаются выше набранные строки.

Добавлено @ 07:38
Цитата(_zorn_ @  6.9.2013,  04:42 Найти цитируемый пост)
И случайно не ставишь точку с запятой после условия цикла.
Но если это когда нибудь произойдет - удачной отладки, чувак. 
По синтаксису оператора цикла точка с запятой после условия как раз обязательна, даже если в заголовке нет инкремента/декрмента: 
Код
for (i=0, n=(zie_t)Araay; i<n;)
, но ни как не 
Код
for (i=0, n=(zie_t)Araay i<n;)
. Забытая точка с запятой - распространённая ученическая ошибка, отлично отлавливаемая при попытке компиляции. Единственное осмысленное исключение - цикл с пустым телом. А вот избыточную, кроме как в альтернативе, или в цикле с не пустым телом, поставить проблематично. Всегда уделяю заголовкам циклов повышенное внимание, не полагаясь на прозрачный набор с мысли конструкцией, как пишется всё остальное. И именно из-за проблем с отловом пустых/не пустых тел циклов.

Это сообщение отредактировал(а) ТарасАтавин - 7.9.2013, 07:43


--------------------
Не так всё плохо, как оно есть на самом деле.
PM MAIL   Вверх
feodorv
Дата 7.9.2013, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 11
Всего: 45



Цитата(ТарасАтавин @  7.9.2013,  08:33 Найти цитируемый пост)
По синтаксису оператора цикла точка с запятой после условия как раз обязательна

Речь идёт об ошибке вида
Код

for( i = 0; i < n; ++i);
{
  dosomething( i );
}

а не о том, о чём Вы пишете...


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
ТарасАтавин
Дата 7.9.2013, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 26.8.2013

Репутация: нет
Всего: нет



Повышенное внимание к строке заголовка цикла при наборе по методе "обозреть сразу" и обязательный дебаг всех циклов. И пока ни одна точка с запятой между телом и заголовком не осталась.

Это сообщение отредактировал(а) ТарасАтавин - 7.9.2013, 17:18


--------------------
Не так всё плохо, как оно есть на самом деле.
PM MAIL   Вверх
bsa
Дата 9.9.2013, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(ТарасАтавин @  7.9.2013,  18:17 Найти цитируемый пост)
Повышенное внимание к строке заголовка цикла при наборе по методе "обозреть сразу" и обязательный дебаг всех циклов. 
А я пользуюсь нормальным IDE, который отступы ставит не по
Цитата(ТарасАтавин @  7.9.2013,  08:33 Найти цитируемый пост)
Табуляция в любой IDE основана не на синтаксисе, а на том, в каких позициях начинаются выше набранные строки.
А по правилам синтаксиса (пусть даже упрощенным).  smile 

PM   Вверх
Thunderbolt
Дата 10.9.2013, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


DevRel
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 7.11.2007
Где: Тула

Репутация: 10
Всего: 16



Жаль, что люди (и программисты в частности) хотят казаться лучше, чем есть. Зачем самообман? Да сложнее, но вполне можно: http://www.viva64.com/en/examples/V529/ smile
--------------------
Карпов Андрей, DevRel в PVS-Studio.
PM MAIL WWW   Вверх
bsa
Дата 10.9.2013, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Thunderbolt, да-а-а... с этим примером даже мой вариант не прокатит.
PM   Вверх
volatile
Дата 10.9.2013, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



да проблема несоответствия форматирования исходника и логического устройства програаммы это проблема многих языков.

кардинально эта проблема решена только в питоне.

*зачеркнул "только" (слишком категорично)

Это сообщение отредактировал(а) volatile - 10.9.2013, 20:26
PM MAIL   Вверх
TarasProger
Дата 13.8.2015, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 5.8.2015

Репутация: нет
Всего: нет



Цитата
Код
Сравнение знаковых и беззнаковых переменных:

Выделить всёкод C++
1:
2:
3:
4:
    
unsigned int BufPos;
std::vector<int> ba;
....
if (BufPos * 2 < ba.size() - 1) { }


Помните, что при смешивании знаковых и беззнаковых переменных:

Уж не хотите ли Вы сказать что size может возвращать signed?

Добавлено через 5 минут и 50 секунд
Цитата
Пренебрежение использованием константности может привести к невозможности заметить трудно устраняемые ошибки. Например:

Код

void foo(std::string &str)
{
  if (str = "1234")
  {
  }
}



В данном примере оператор '=' перепутан с оператором '=='. Если бы переменная 'str' была объявлена как константная, то такой код даже не скомпилировался бы.
А как констатность поможет не сравнить с чем нибудь левым? Или сравнить правильно, но не правильно среагировать на результат сравнения? И с каких это пор стало трудно отличить операцию и утверждение? Вот допустить такую ошибку действительно трудно.

Добавлено через 8 минут и 43 секунды
Цитата
Сравниваются не строки, а указатели на строки:
    
Код

сhar TypeValue [4];
...
if (TypeValue == "S") {}



Даже если в переменной TypeValue будет находиться строка "S" такое сравнение всегда будет возвращать 'false'. Корректным будет использовать функции для сравнения строк 'strcmp' или 'strncmp'.
А вот это новичкам не всегда очевидно, а если они ещё и самоучки, то может быть по дефолту и не понятно.

Добавлено через 13 минут и 17 секунд
Цитата
Такой код может привести к тому, что несколько байт памяти находящейся следом за 'prot.ID' так же будет заполнена нулями.
По идее вроде один.
PM MAIL   Вверх
TarasProger
Дата 13.8.2015, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 5.8.2015

Репутация: нет
Всего: нет



Цитата
Выделяем памяти через 'new' или 'malloc' и забываем ее освободить через 'delete'/'free' соответственно. Например, может быть такой код:
Выделил, сразу освободил, вернулся назад. Что здесь вообще можно забыть? А освобождаешь сразу потому, что примываешь, как где память должна выделяться и освобождаться, одновременно.

Добавлено через 7 минут и 48 секунд
Цитата
Использование неинициализированных переменных:
А на эту тему есть басня: 
Цитата
Математик биолог и физик наблюдают за домом. В дом заходят люди, люди оттуда выходят. Почти весь день количество сходилось, но вдруг вошло два человека, а вышло три. Физик:
- Это ошибка эексперимента, так быть не может.
Биолог:
Просто они внутри размножились.
Математик: сейчас в дом зайдёт ещё один человек и он снова будет пуст.

PM MAIL   Вверх
TarasProger
Дата 13.8.2015, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 5.8.2015

Репутация: нет
Всего: нет



Цитата
Перепутаны приоритеты логических операций '&&' и '||'. Оператор '&&' имеет более высокий приоритет.

Код

if (A || B && C)
 { }
Да откуда ж "анализатору" об этом знать? Ведь в зависимости от задачи может быть правильно и 
Код
if ((A || B) && C)
, и 
Код
if (A || (B && C))
. Тоже относится и к тому, выполнять ли сначада сдвиг, а потом сложение, или наоборот.

Добавлено через 3 минуты и 18 секунд
Ладно ещё 
Код
if (str="S")
, здесь не может быть "присвой строку "S" переменной str и если в результате она не станет ложной". А если справа не литерал, а другая переменная? Ведь может именно это и подразумеваться.
PM MAIL   Вверх
TarasProger
Дата 13.8.2015, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 5.8.2015

Репутация: нет
Всего: нет



Цитата(bsa @  2.9.2013,  15:55 Найти цитируемый пост)
ТарасАтавин, что за бред ты несешь? Причем тут паскаль? 
Вот именно. При чём здесь паскаль то?

Добавлено через 8 минут и 10 секунд
Цитата(bsa @  6.9.2013,  10:18 Найти цитируемый пост)
Нынче, это сделать сложно. Мы же в нотепадах пишем. А нормальная IDE отступ не поставит в этом случае.
Вот только их не IDE ставит.

Добавлено через 11 минут и 23 секунды
Цитата(bsa @  9.9.2013,  11:43 Найти цитируемый пост)
А я пользуюсь нормальным IDE, который отступы ставит не по
Цитата(ТарасАтавин @  7.9.2013,  08:33 Найти цитируемый пост)
Табуляция в любой IDE основана не на синтаксисе, а на том, в каких позициях начинаются выше набранные строки.
А по правилам синтаксиса (пусть даже упрощенным). 
Сказочной?

PM MAIL   Вверх
xvr
Дата 14.8.2015, 13:05 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Какой однако поток сознания за 2 года накопился  smile 

PM MAIL   Вверх
TarasProger
Дата 15.8.2015, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 5.8.2015

Репутация: нет
Всего: нет



Цитата(xvr @  14.8.2015,  13:05 Найти цитируемый пост)
Какой однако поток сознания за 2 года накопился
Может Вам и два года, но я намного старше. И вообще в прошлом веке университет закончил.

PM MAIL   Вверх
xvr
Дата 17.8.2015, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(TarasProger @  15.8.2015,  12:06 Найти цитируемый пост)
Может Вам и два года, но я намного старше.

Не мне, а теме. А то, что вы троль со стажем никто и не сомневается  smile 

Цитата(TarasProger @  15.8.2015,  12:06 Найти цитируемый пост)
И вообще в прошлом веке университет закончил.

И теперь решили нам тут изложить все, что вспомнили с прошлого века? И какое отношение имеет этот 'поток сознания' (как 2х годичной давности, так и последний) к теме превоначальной статьи? Вы ее вообще читали? Все ваши замечания сводятся к 'этого не может быть, потому что не может быть никогда' и 'реальные програмисты так не пишут' (да и вообще не ошибаются). А то, что в статье как раз и приведены примеры от тех самых 'реальных програмистов' вы начисто проигнорировали  smile

Добавлено через 2 минуты и 31 секунду
PS. Понял, что мне возражения ТарасАтавина/TarasProger'а напоминяют - спор в машине с навигатором  smile 

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1020 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.