#include <stdio.h> int main(void) { int i = 0; // does it work at all??/ i++; printf( "%d", i); return 0; }
cranky
Триграфы, классика. Напомнило http://dobrokot.ru/WinnieColorizer/ .
Это у тебя в реальном коде сыграло?
FordPerfect
> Это у тебя в реальном коде сыграло?
и да и нет. триграф образовался не при наборе кода, а в результате формирования ansi-строки из двоичных данных и записи ее в текстовый файл. но, думаю, вполне возможно такое и ручками сделать, если неаккуратно удалить следующую строку с комментарием так чтобы остался символ '/' в конце предыдущей
Только что. Проявлялось забавно, в игре есть клетки, которые запитываются электричеством, и вот, если электричества не хватало, то одна такая запитанная клетка на краю запитанной части сети "отрывалась" и улетала бродить по сети до тупика.
А сам баг ни о чём, недоисправленный копипаст.
Тоже тупой баг.
Пишу рандомных ботов:
А боты как-то не блещут интересным поведением.
Фикс:
Здесь примечание: fire не реализован, а special в режимах "always on" и "always off" выглядит одинаково.
Ну и тогда уж вдогонку ещё 1:
mat<3,3,float> rot33=rotation_matrix_from_unit_quat(entity.rot); mat<3,3,float> rot44;
Фикс:
mat<4,4,float> rot44;
Вывожу целое число, должно быть тысяча. Выводит 3e8.
Откуда 300 тысяч?! При чём здесь скорость света?
Решение:
printf("%x\n",1000);
(я упрощаю).
Выглядел баг так: игрок как-то странно дёргается и иногда улетает нафиг.
Даже после того, как выяснил, что "нафиг" означает NaN, всё-равно прошло больше часа, прежде, чем Зоркий Глаз увидел неинициализированную переменную.
О, забавно получилось.
Пишу ботов, боты тупят.
Смотрю, они всегда выбирают action=idle.
Праздник багов вообще офигенный какой-то.
Во-первых, наткнулся на MinGW + -mno-sse + WndProc (которое у меня походу вылезло в picea, где я забил на -mno-sse без подробных разбирательств):
http://www.peterstock.co.uk/games/mingw_sse/
https://github.com/nothings/stb/issues/81
Это прекрасно само по себе.
И рядом 2 (столько нашёл, может больше) тупейших бага с моей стороны:
1. Было:
os::get_message(msg) // Код, обрабатывающий msg.
Стало:
while(os::get_message( msg)) { // Код, обрабатывающий msg. }
2. Было:
// Assignment-arithmetic Type & operator+=(const Type &src) { *this=src+( *this); return *this; } Type & operator-=( const Type &src) { *this=src-( *this); return *this; }
Стало:
// Assignment-arithmetic Type & operator+=(const Type &src) { *this=( *this)+src; return *this; } Type & operator-=( const Type &src) { *this=( *this)-src; return *this; }
(это из темы о fixed-point, кстати).
Ищу дальше.
FordPerfect
> Type & operator+=(const Type &src) { *this=src+(*this); return *this; }
А в чём профит делать += через +, а не наоборот?
krian
"+" - constexpr, а "+=" - нет.
Соответственно, для constexpr всё-равно "+" делать; значит - можно выразить "+=" через него.
Проявляется таким видом: игрок становится на бонус, эффект бонуса срабатывает (мана восстанавливается), но бонус не исчезает, и эффект срабатывает каждый фрейм.
Решение: было return вместо break в switch'е (по типу бонуса; return - вроде бы в результате копипаста), и функция тупо не доходила до конца.
Тупо, но забавно.
Было:
static char messages_text[n_messages][1024]; // ... strncpy(messages_text[0],text,sizeof( messages_text[0]-1));
Стало:
static char messages_text[n_messages][1024]; // ... strncpy(messages_text[0],text,sizeof( messages_text[0])-1);
FordPerfect
> Тупо, но забавно.
заметил, что такие синтаксические баги часто рождаются, когда т.з. многократно изменяется с большей скоростью, чем успевают вносить изменения в код :/