Кресты / Говнокод #28928 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
for(int i = 0; i < p.mDict.TblSize; i++)
		for(auto *node = p.mDict.table[i]; node; node = node->n)
			for(int j = 0; j < node->v.TblSize; j++)
				for(int k = 0; k < node->v.table[j].count; k++ )
					if(node->v.table[j][k].v)
						Log("Section %s: unused config key %s = %s\n", node->k, node->v.table[j][k].k, node->v.table[j][k].v);

mittorn mittorn, (Updated )

Комментарии (2, +2)

Кресты / Говнокод #28905 Ссылка на оригинал

0

  1. 1
  2. 2
Борманд ушёл, потому, что был анимешником, с гомосексуальными и педофильскими наклонностями.
Ему стало страшно, что я вскрыл его покровы.

Я не знаю ни одного парня-анимешника, который бы не был полупокером.

3uMuCTOH 3uMuCTOH, (Updated )

Комментарии (0)

Кресты / Говнокод #28892 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
// В преддверии нового года на сайте PVS-Studio увеличилось количества C++ говнокода.
// Во-первых, вышла подбора багов за год, а во-вторых, квиз на поиск багов.
// Первый пример кода из квиза для разминки:

void  UObject::setDeltaPitch(const UMatrix &gizmo) {
  ....
  if (_fpzero(amount, eps))
    return
  rotateAccum.setAnglesXYZ(axis);
  ....
}

Если заинтересовались, то приятного чтения и удачи в поисках говнокодистых багов. Вас ждёт говнокод первого сорта.
Топ 10 ошибок в C и С++ проектах в 2023 году - https://pvs-studio.ru/ru/blog/posts/cpp/1092/
С++ квиз от PVS-Studio и Сергея Кушниренко - https://pvs-studio.ru/ru/blog/quest/kushnirenko_quiz/
А если что-то останется непонятным в квизе, то есть его разбор - https://pvs-studio.ru/ru/blog/posts/cpp/1091/
С наступающим НГ!

Andrey_Karpov Andrey_Karpov, (Updated )

Комментарии (37, +37)

Кресты / Говнокод #28882 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
// Конкурс для C++ программистов от команды PVS-Studio
// Уникальная возможность получить приз за говнокод с багом!
// https://habr.com/ru/companies/pvs-studio/articles/775388/

Поделитесь своим кодом с ошибкой и участвуйте в розыгрыше 10 книг "Вредные советы для C++ программистов". Подробности в публикации на Хабре: Конкурс для C++ программистов и их любимых багов - https://habr.com/ru/companies/pvs-studio/articles/775388/

Andrey_Karpov Andrey_Karpov, (Updated )

Комментарии (4, +4)

Кресты / Говнокод #28858 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
  71. 71
  72. 72
  73. 73
  74. 74
  75. 75
  76. 76
  77. 77
  78. 78
  79. 79
  80. 80
  81. 81
  82. 82
  83. 83
  84. 84
  85. 85
  86. 86
  87. 87
  88. 88
  89. 89
  90. 90
  91. 91
  92. 92
  93. 93
  94. 94
  95. 95
  96. 96
  97. 97
  98. 98
  99. 99
  100. 100
void text::draw()
{
	CmdWinGUI::draw();
	COORD temp = startCo;		//Разный мусор
	COORD tempEnd = startCo;
	int16_t _al = 0;
	int16_t _an = 0;
	int16_t remain = 0;
	uint8_t a = 0;
	bool fullRow = 1;	//Флаги, не изменять
	bool alignPrepare = 0;
	if (tableLine)
	{
		temp.Y = temp.Y + lineShift + sepShift;
	}
	if (!tableFormat)
	{
		if (alignSetting == ALIGN_C)
		{
			_al = sizeCo.X/2;
			for (uint8_t a = 0;a < 0xFF;++a)	//Измеряем длину текстового поля
			{
				if (textBuffer[a] == NULL)
					break;
				++remain;
			}
			temp.X=startCo.X+ _al-remain/2;	//Корректируем курсор в соответствии с расчётами
			if (temp.X < startCo.X)			//Если предыдущие вычисления дали ошибку - выход за предел рамки слева
				temp.X = startCo.X;			//Корректируем
		}
		for (;;)
		{
			SetConsoleCursorPosition(hCon, temp);
			if (textBuffer[a] == NULL)
				break;
			printf("%c", textBuffer[a]);
			++temp.X;
			++a;
			if (temp.X == startCo.X + sizeCo.X - 1) //Проверяем достигло ли рамки, иначе обрываем цикл
				break;
		}
		return;
	}
	for (uint8_t b = 0;b<=filledRows;++b)
	{
		if (!fullRow)
		{
			temp.X = tempEnd.X;
		}
		tempEnd.X += tableRowSize[b] - 1;
		if (alignSetting == ALIGN_C)
		{
			--temp.X;
			//Предварительные расчеты смещения
			if (!alignPrepare)
			{
				for (SHORT a = temp.X;a < 0xFF;++a)
				{
					if (a == tempEnd.X) //Проверяем достигло ли рамки, иначе обрываем цикл
					{
						--_an;
						break;		//половина длины поля таблицы
					}
					++_an;
				}
				for (uint8_t a = 0;a < 0xFF;++a)
				{
					if (tableText[b][a] == NULL)
					{
						_al = a;	//половина длины слова
						break;
					}
				}
				alignPrepare = 1;	//Подымаем флаг готовности
			}
			//Коррекция положения курсора в соответствии с результатами блока предварительных расчётов
			temp.X += abs(_an / 2) - abs(_al / 2);
			_an = 0;
		}for (;;){
			SetConsoleCursorPosition(hCon, temp);	//Ставим курсор в начало/середину/конец поля
			if (tableText[b][a] == NULL)
			{
				fullRow = 0;	//При окончании поля текста до заполнения поля снимаем флаг заполнения поля
				break;
			}
			++temp.X;
			if (temp.X == tempEnd.X) //Проверяем достигло ли рамки, иначе обрываем цикл
			{
				fullRow = 1;	//При окончании поля в таблице до завершения поля текста прекращаем вывод и выходим из цикла
				break;
			}
			printf("%c", tableText[b][a]);
			++a;
		}
		a = 0;
		alignPrepare = 0;	//Сбрасываем флаг для следующей итерации
	}
	if (isChanged)
		this->editFlagSwitch();
}

Рендер текста с учётом коллизии слева и справа

siclown siclown, (Updated )

Комментарии (0)

Кресты / Говнокод #28857 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
#include "Windows.h"
void line::draw()
{
	CmdWinGUI::draw();
	uint8_t modB = 0; //modeByte
	COORD tempSt = lineStart;
	COORD tempEn = lineEnd;
	SHORT dX = abs(lineEnd.X - lineStart.X);
	SHORT dY = abs(lineEnd.Y - lineStart.Y);
	SHORT sX = lineStart.X < lineEnd.X ? 1 : -1;
	SHORT sY = lineStart.Y < lineEnd.Y ? 1 : -1;
	SHORT dErr = dX - dY;
	SHORT dErr2 = 0;
	if (scan)
	{
		SetConsoleCursorPosition(hCon, lineStart);
		for (uint8_t a = 0;a <= lineEnd.X-lineStart.X;++a)
		{
			modB = lineAtrBuffer[a];
			SetConsoleTextAttribute(hCon, modB);
			printf("%c", lineSymBuffer[a]);
		}
		if (isChanged)
			this->editFlagSwitch();
		return;
	}
	for (;;)
	{
		SetConsoleCursorPosition(hCon, tempSt);
		printf("%c", lineSym);
		if (tempSt.X == tempEn.X&&tempSt.Y == tempEn.Y)
			break;
		dErr2 = dErr * 2;
		if (dErr2 > -dY)
		{
			dErr -= dY;
			tempSt.X += sX;
		}
		if (dErr2 < dX)
		{
			dErr += dX;
			tempSt.Y += sY;
		}
	}
	if (isChanged)
		this->editFlagSwitch();
}

Отрисовка произвольной графической линии в консоли

siclown siclown, (Updated )

Комментарии (1, +1)