- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 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;
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
0
#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
0
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;
}
0
// 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;
Из материалов одной лекции. Пример должен показывать опасность выхода за пределы массива, но сам код написано в очень оригинальном (читайте: избыточном и странном) стиле.
0
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);
}
Попросили по программированию в универе написать сортировку на С. Написал.
0
// 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
+1
#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))
0
// Глобальные переменные
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;
}
Загружалка уровня сокобана, сгенерированная нейронкой
0
Example #3: The ``Ultimate''
+-----------------------------+
| +---+ |
| +---+ |+-+| |
| ^ | |^ || |
void (*signal(int, void (*fp)(int)))(int);
^ ^ | ^ ^ || |
| +------+ | +--+| |
| +--------+ |
+----------------------------------+
Question we ask ourselves: What is `signal'?
Это искусство.
0
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/
0
/* 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 и комментариями.