1. Си / Говнокод #29294

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    #include <stddef.h>
    __attribute__((const)) int f(int a);
    
    void conv(int *restrict in, int *restrict out, size_t sz)
    {
      for(size_t i = 0; i < sz-1; i++)
      {
        out[i] = f(in[i])+f(in[i+1]);
      }
      return;
    }

    Пример, на котором обделывается оптимизатор Clang но не обделывается оптимизатор GCC
    https://godbolt.org/z/W9WshxsKG

    j123123, 10 Ноября 2026

    Комментарии (5)
  2. Си / Говнокод #29293

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    int mod(int a, int b) {
    	int r = 0, i;
    	for (i = 30; i >= 0; i--) {
    		r <<= 1;
    		if ((a >> i) & 1) {
    			r++;
    		}
    		while (r >= b)
    			r -= b;
    	}
    	return r;
    }

    anime-girl, 10 Ноября 2026

    Комментарии (13)
  3. Си / Говнокод #29289

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    // Example of a string bug: entering a password
    
    char ok = 0, password[16];
    scanf("%s", password);
    if (!strcmp(password, "correct")) ok = 1;
    if (!ok) {
      printf("Wrong password\n");
      return 1;
    }
    printf("Password accepted\n");
    return 0;

    Из материалов одной лекции. Пример должен показывать опасность выхода за пределы массива, но сам код написано в очень оригинальном (читайте: избыточном и странном) стиле.

    anime-girl, 21 Октября 2026

    Комментарии (3)
  4. Си / Говнокод #29288

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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
    void sort(void *a, int n, int size, int (*cmp)(const void*, const void*)) {
    	int j;
    	if (n <= 1) return;
    	if (n == 2) {
    		if (cmp(a + size*1, a)) {
    			for (j = 0; j < size; j++) {
    				SWAP(*(char*)(a + j + size), *(char*)(a + j));
    			}
    		}
    		return;
    	}
    	int d, p = 0, i;
    	for (i = 1; i < n; i++) {
    		if (cmp(a + size*i, a + size*(i-1))) { d = i; goto sorting; }
    	}
    	return;
    sorting:
    	static char buf[128];
    	memcpy(buf, a + size*d, size);
    	for (i = 0; i < n; i++) {
    		if (!cmp(buf, a + i*size)) {
    			for (j = 0; j < size; j++) {
    				SWAP(*(char*)(a + j + i*size), *(char*)(a + j + p*size));
    			}
    			p++;
    		}
    	}
    	sort(a, p, size, cmp);
    	sort(a+p*size, n-p, size, cmp);
    }

    Попросили по программированию в универе написать сортировку на С. Написал.

    anime-girl, 15 Октября 2026

    Комментарии (34)
  5. Си / Говнокод #29282

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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
    // macro.h
    #undef IF_NOT_HEADER
    #undef IF_HEADER
    #undef FUNC_BODY
    #ifndef IS_HEADER
    #define IF_NOT_HEADER(...) __VA_ARGS__
    #define IF_HEADER(...)
    #define FUNC_BODY(...) {__VA_ARGS__}
    #else
    #define IF_NOT_HEADER(...)
    #define IF_HEADER(...) __VA_ARGS__
    #define FUNC_BODY(...) ;
    #endif
    
    // src.c
    #include "macro.h"
    IF_HEADER(extern) int var IF_NOT_HEADER(= 42);
    IF_HEADER(extern) int f(int x) FUNC_BODY(return var;)
    
    // header.h
    #ifndef IS_HEADER
    #define IS_HEADER
    #include "src.c"
    #undef IS_HEADER
    #else
    #include "src.c"
    #endif

    Rooster, 20 Сентября 2026

    Комментарии (1)
  6. Си / Говнокод #29279

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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
    #include <stdio.h>
    
    typedef struct true_t {
        char _;
    } true_t;
    
    true_t TRUE;
    
    typedef struct false_t {
        char _;
    } false_t;
    
    false_t FALSE;
    
    int f_true() {
        return 1;
    }
    
    int f_false() {
        return 0;
    }
    
    #define bool_v(B) _Generic((B *) (0), true_t *: TRUE, false_t *: FALSE)
    #define bool_v_to_int(B) _Generic(B, true_t: 1, false_t: 0)
    
    #define v_to_bool(V) typeof(V)
    
    #define is_string_v(X) _Generic((X), \
            char *: 1,                   \
            default: 0)
    
    #define is_string_t(X) typeof(_Generic((X), \
            char *: TRUE,                       \
            default: FALSE))
    
    
    #define has_signature_v(X, R, ...)         \
        _Generic((X),                          \
                SignatureM(R, __VA_ARGS__): 1, \
                default: 0)
    
    #define has_signature_t(X, R, ...)            \
        typeof(_Generic((X),                      \
                SignatureM(R, __VA_ARGS__): TRUE, \
                default: FALSE))
    
    #define to_string(x) _Generic((x), \
            true_t: "true",            \
            false_t: "false",          \
            char*: x,                  \
            const char*: x)
    
    #define has_same_type_v(X, Y)       \
        _Generic(has_same_type_t(X, Y), \
                true_t: 1,              \
                false_t: 0)
    
    #define has_same_type_t(X, Y) typeof(_Generic((X), \
            typeof(Y): TRUE,                           \
            default: FALSE))
    
    #define SignatureM(R, ...) R (*)(__VA_ARGS__)
    
    #define is_same_t(X, Y)          \
        typeof(_Generic(((X *) (0)), \
                Y *: TRUE,           \
                default: FALSE))
    
    #define and_t(X, Y)                                                    \
        typeof(_Generic(bool_v(X),                                         \
                true_t: _Generic(bool_v(Y), true_t: TRUE, false_t: FALSE), \
                false_t: _Generic(bool_v(Y), true_t: FALSE, false_t: FALSE)))
    
    #define or_t(X, Y)                                                    \
        typeof(_Generic(bool_v(X),                                        \
                true_t: _Generic(bool_v(Y), true_t: TRUE, false_t: TRUE), \
                false_t: _Generic(bool_v(Y), true_t: TRUE, false_t: FALSE)))
    
    #define not_t(X)               \
        typeof(_Generic(bool_v(X), \
                true_t: FALSE,     \
                false_t: TRUE))
    
    #define result_t(X, ...) typeof((X) (__VA_ARGS__))
    
    #define id_sig(T) SignatureM(T, void)
    #define true_sig id_sig(true_t)
    #define false_sig id_sig(false_t)
    #define _0 false_sig
    #define _1 true_sig
    
    #define bool_sig_v(S) _Generic((S) (0), true_sig: TRUE, false_sig: FALSE)
    #define bool_sig_int(S) _Generic((S) (0), true_sig: 1, false_sig: 0)
    #define bool_sig_t(S) typeof(bool_sig_v(S))
    
    #define sig_apply_res_t(X) typeof(((X) (0))())
    
    #define is_same_sig_t(SA, SB) typeof(_Generic((SA) (0), SB: TRUE, default: FALSE))

    j123123, 06 Сентября 2026

    Комментарии (12)
  7. Си / Говнокод #29278

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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
    // Глобальные переменные
    
    uint8_t *map = NULL;
    int map_width = 0;
    int map_height = 0;
    
    bool load_level(const char *filename) {
        FILE *file = fopen(filename, "r");
        if (!file) {
            printf("Ошибка: Не удалось открыть файл %s\n", filename);
            return false;
        }
    
        char lines[512][512];
        int h = 0;
        char buffer[512];
    
        while (fgets(buffer, sizeof(buffer), file)) {
            buffer[strcspn(buffer, "\r\n")] = 0;
            if (buffer[0] == '\0' || buffer[0] == ';') continue;
    
            bool contains_map_char = false;
            for(int i=0; buffer[i]; i++) {
                if (strchr("#$@.*+ ", buffer[i])) {
                    contains_map_char = true;
                    break;
                }
            }
            
            if (contains_map_char) {
                strncpy(lines[h], buffer, 511);
                h++;
                if (h >= 512) break;
            }
            if (h > 0 && buffer[0] == '\0') break;
        }
        fclose(file);
    
        if (h == 0) return false;
    
        int w = 0;
        for (int i = 0; i < h; i++) {
            int len = strlen(lines[i]);
            if (len > w) w = len;
        }
    
        map = malloc(w * h * sizeof(uint8_t));
        map_width = w;
        map_height = h;
        memset(map, CELL_EMPTY, w * h);
    
        for (int y = 0; y < h; y++) {
            for (int x = 0; x < w; x++) {
                char c = (x < (int)strlen(lines[y])) ? lines[y][x] : ' ';
                if (c == '#') map[y * w + x] = CELL_WALL;
                else if (c == '$') map[y * w + x] = CELL_CUBE;
                else if (c == '.') map[y * w + x] = CELL_TARGET;
                else if (c == '*') map[y * w + x] = CELL_CUBE_ON_TARGET;
                else if (c == '@') { map[y * w + x] = CELL_EMPTY; playerX = x; playerY = y; }
                else if (c == '+') { map[y * w + x] = CELL_TARGET; playerX = x; playerY = y; }
                else map[y * w + x] = CELL_EMPTY;
            }
        }
        return true;
    }

    Загружалка уровня сокобана, сгенерированная нейронкой

    j123123, 24 Августа 2026

    Комментарии (11)
  8. Си / Говнокод #29269

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    Example #3: The ``Ultimate''
                          +-----------------------------+
                          |                  +---+      |
                          |  +---+           |+-+|      |
                          |  ^   |           |^ ||      |
                    void (*signal(int, void (*fp)(int)))(int);
                     ^    ^      |      ^    ^  ||      |
                     |    +------+      |    +--+|      |
                     |                  +--------+      |
                     +----------------------------------+
    Question we ask ourselves: What is `signal'?

    Это искусство.

    JloJle4Ka, 29 Июня 2026

    Комментарии (15)
  9. Си / Говнокод #29242

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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
    char seq[32];
    int s = 0;
    seq[s++] = ':';
    seq[s++] = ' ';
    seq[s++] = 'i';
    seq[s++] = 'c';
    seq[s++] = 'm';
    seq[s++] = 'p';
    seq[s++] = '_';
    seq[s++] = 's';
    seq[s++] = 'e';
    seq[s++] = 'q';
    seq[s++] = '=';
    seq[s++] = '0' + i;
    seq[s++] = ' ';
    seq[s++] = 't';
    seq[s++] = 't';
    seq[s++] = 'l';
    seq[s++] = '=';
    seq[s++] = '6';
    seq[s++] = '4';
    seq[s++] = ' ';
    seq[s++] = 't';
    seq[s++] = 'i';
    seq[s++] = 'm';
    seq[s++] = 'e';
    seq[s++] = '=';
    /* Random-ish time 10-50ms */
    int time_ms = 15 + (i * 7) % 30;
    seq[s++] = '0' + (time_ms / 10);
    seq[s++] = '0' + (time_ms % 10);
    seq[s++] = ' ';
    seq[s++] = 'm';
    seq[s++] = 's';
    seq[s++] = '\n';
    seq[s] = '\0';

    Вайб-кода из проекта Vib-OS. Если хочется ещё: https://pvs-studio.ru/ru/blog/posts/cpp/1354/

    Andrey_Karpov, 20 Марта 2026

    Комментарии (9)
  10. Си / Говнокод #29221

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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
    /* IOCTL calls for E-Ink paper update */
    #define EPAPER_UPDATE_LOCAL 0x101         /** Update localarea */
    #define EPAPER_UPDATE_PART  0x102         /** ???              */
    #define EPAPER_UPDATE_FULL  0x103         /** Fully update     */
    #define EPAPER_UPDATE_DISPLAY_QT  0x120d  /** Update all display
    
    /* Helper FB update function */
    int epaper_update_helper(int fb, unsigned long int ioctl_call, void *mode)
    {
      if (framebuffer_descriptor >= 0)
      {
        errno=0;
        ioctl(fb, ioctl_call, mode);
    //    sleep_timer=sleep_timeout; // Reset sleep timer on every display refresh = we are not have any constantly refreshing display parts now!
        return errno;
      }
      return TRUE;
    }
    
    void epaperUpdate(__attribute__((unused)) unsigned long int ioctl_call, __attribute__((unused)) void *mode)
    {
      #ifndef __amd64
      int ioctl_result;
      #endif //__amd64
      TRACE("Called void epaperUpdate()\n");
      if (enable_refresh == FALSE)
      {
        TRACE("Display refresh was locked, IGNORED!\n");
        (void) ioctl_call;
        (void) mode;
        return;
      }
      #ifndef __amd64
      /* Иначе запись в видеопамять не успевает завершиться и получаем верхний левый угол новой картинки и нижний правый - прежней. */
    //  if (hw_platform != HW_PLATFORM_SIBRARY_GTK) {
    //    const struct timespec delay = {0, QT_REFRESH_DELAY};
    //    nanosleep(&delay, NULL);
    //  }
      ioctl_result=epaper_update_helper(framebuffer_descriptor, ioctl_call, mode);
      #ifdef debug
      if (ioctl_result != 0)
      {
        TRACE("Display refresh ioctl call FAILED %d (%s)\n", ioctl_result, strerror(ioctl_result));
        // GTK прошивка, обновление от Qt: 1 (Операция не позволяется)
        // Qt прошивка, обновление от GTK: 22 (Недопустимый аргумент)
      }
      #else
      (void) ioctl_result;
      #endif
      #endif
      return;
    }
    
    
    int detect_refresh_type (void)
    {
      int mode=3;
    #if 0
      struct mxcfb_update_data data = {
        .update_region =
        { .top = 0,
          .left = 0,
          .width = 1,
          .height = 1
        },
        .update_mode = UPDATE_MODE_FULL,
        .update_marker = 0,
        .waveform_mode = WAVEFORM_MODE_AUTO,
        .temp = TEMP_USE_AMBIENT,
        .flags = 0
      };
    #endif
      if (epaper_update_helper(framebuffer_descriptor, EPAPER_UPDATE_DISPLAY_QT, &mode) == 0)
      {
        refresh_type=REFRESH_NEW;
        TRACE("Display refresh was successed, new\n");
      }
      else if (epaper_update_helper(framebuffer_descriptor, EPAPER_UPDATE_FULL, &mode) == 0)
      {
        refresh_type=REFRESH_LEGACY;
        TRACE("Display refresh was successed, legacy\n");
      }
    //  else if (epaper_update_helper(framebuffer_descriptor, MXCFB_SEND_UPDATE_ORG, &data) == 0)
    //  {
    //    refresh_type=REFRESH_KOBO;
    //    TRACE("Display refresh was successed, kobo\n");
    //  }
      else
      {
        TRACE("Display refresh was not detected!\n");
      }
      return (refresh_type);
    }

    Источник:
    https://github.com/gheorghe-crihan/digma-e605-qt-apps-framework/blob/master/firstapp/digma_hw.c

    Не то, чтобы говно, просто код испещрён #if 0 и комментариями.

    HoBorogHuu_nemyx, 25 Января 2026

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