- 1
- 2
- 3
#define TEN 10
#define TEEN 100
#define TEEEN 1000
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+115
#define TEN 10
#define TEEN 100
#define TEEEN 1000
+137
int memcmp (const void* v1, const void* v2, size_t n)
{
uint32_t *s1;
uint32_t *s2;
size_t i;
s1 = (uint32_t*) v1;
s2 = (uint32_t*) v2;
for (i = 0; i < n; i++) {
if (*s1 != *s2) {
return *(const uint32_t *)s1 >
*(const uint32_t *)s2 ? 1 : -1;
}
s1++;
s2++;
}
return 0;
}
Реализация memcmp в библиотеке одной малоизвестной "учебной" ОС реального времени. Учебной в том смысле, что по этой системе разве что доклады, презентации и статьи делали, где-то реально она вряд ли использовалась.
Для интересующихся http://pok.safety-critical.net/
+143
VariableValue *locVars;
locVars = new VariableValue;
locVars->variable = "r";
locVars->value = mTaskParameters.rNodes[0]; //x_low;
locVars->link = new VariableValue;
locVars->link->variable = "theta";
locVars->link->value = mTaskParameters.thetaNodes[0]; //y_low;
locVars->link->link = new VariableValue;
locVars->link->link->variable = "r_min";
locVars->link->link->value = mTaskParameters.rNodes[0]; //this->x_low;
locVars->link->link->link = new VariableValue;
locVars->link->link->link->variable = "r_max";
locVars->link->link->link->value = mTaskParameters.rNodes[mTaskParameters.rNodes.size()-1]; //this->x_high;
locVars->link->link->link->link = NULL;
Построение связного списка
+108
assert(buf=malloc(BUF_SIZ));
А в релизе мы сэкономим памяти
+134
int t, max, x;
scanf("%d", &x);
for(t=x%10; max!=t; max=t);
for(t=x%100/10; max<t; max=t);
for(t=x%1000/100; max<t; max=t);
for(t=x/1000; max<t; max=t);
printf("Max: %d\n", max);
Нахождение максимальной цифры в 4-значном числе. Одна из первых лаб по Си. Предполагалось использование if, но студенты не ищут лёгких путей. (Сдвиги они пока не учили, так что на вычисление цифры не обращайте внимания.)
+139
out[0] = str[0] > str[1] && str[0] > str[2] ? (out[1] = str[1] > str[2] ? (out[2] = str[2],str[1]) : (out[2] = str[1],str[2]) ,str[0]) : (str[1] > str[2] ? (out[1] = str[0] > str[2] ? (out[2] = str[2],str[0]): (out[2] = str[0],str[2]),str[1]) :(out[1] = str[0] > str[1] ? (out[2] = str[1],str[0]): (out[2] = str[0],str[1]),str[2]) );
Сортируем 3 символа.
+128
#include "unpacker.h"
Unpacker::Unpacker(char *name) {
_splitString = new char*[16];
_ctx = SDL_RWFromFile(name, "rb");
}
Unpacker::~Unpacker() {
delete _splitString;
SDL_RWclose(_ctx);
SDL_FreeRW(_ctx);
}
Dir *Unpacker::getDir(char *path) {;
int index = 1;
char pth[256];
char name[80];
char *str = "";
if (!path)
return NULL;
_split(path);
SDL_RWseek(_ctx, 2, SEEK_SET);
pth[0] = '/'; pth[1] = '\0';
while (_splitString[index]) {
Uint16 count;
Uint32 hash;
str = _splitString[index];
hash = _hash(str);
count = SDL_ReadLE16(_ctx);
for (int i=0; i<count; i++) {
Uint32 h;
Uint32 offset;
h = SDL_ReadLE32(_ctx);
offset = SDL_ReadLE32(_ctx);
if (hash == h) {
Uint8 size;
Uint32 curPos = SDL_RWtell(_ctx);
SDL_RWseek(_ctx, offset, SEEK_SET);
SDL_RWread(_ctx, &size, 1, 1);
SDL_RWread(_ctx, name, size, 1);
name[size] = '\0';
if (!strcmp(str, name)) {
if (_splitString[index+1]) {
strcat(pth, str);
strcat(pth, "/");
}
break;
} else {
if (i == count-1)
return NULL;
SDL_RWseek(_ctx, curPos, SEEK_SET);
}
}
}
index++;
}
Dir *dir = new Dir;
strcpy(dir->name, str);
strcpy(dir->path, pth);
dir->dirsCount = SDL_ReadLE16(_ctx);
dir->dirsOffset = SDL_RWtell(_ctx);
SDL_RWseek(_ctx, dir->dirsCount*8, SEEK_CUR);
dir->filesCount = SDL_ReadLE16(_ctx);;
dir->filesOffset = SDL_RWtell(_ctx);
return dir;
}
File *Unpacker::getFile(char *path) {
char pth[256];
char nm[80];
int index = 2;
_split(path);
if (!_splitString[1])
return NULL;
if (_splitString[2]) {
strcpy(pth, "/");
strcpy(pth, _splitString[1]);
strcat(pth, "/");
} else {
Dir *dir = getDir("/");
return getFile(dir, _splitString[1]);
}
while (1) {
if (_splitString[index+1]) {;
strcat(pth, _splitString[index]);
strcat(pth, "/");
} else {
strcpy(nm, _splitString[index]);
break;
}
index++;
}
Нашел у себя на диске - старое творенье, когда я был мал и глуп... Распаковщик архива на своего формата на основе zlib.
+139
for (normalize(); n > 0; scanf("%d", &temp, n--)){...}
Но ведь работает!
+129
#include <stdio.h>
#include <dlfcn.h>
#include <getopt.h>
#include <string.h>
#include <stdlib.h>
#define int64 long long
const char* help =
" -h,--help это сообщение\
-f,--func имя функции\
-n,--num количество аргументов функции\
-a,--arg1 первый аргумент\
-b,--arg2 второй аргумент";
struct option longopts[] ={
{"func",1,NULL,'f'},
{"help",1,NULL,'h'},
{"num", 1,NULL,'n'},
{"arg1",1,NULL,'a'},
{"arg2",1,NULL,'b'},
{0,0,0,0}
};
void strtoa(void** arg, char* optarg){
int tmp;
char* e;
tmp = strtol(optarg,&e,10);
if (e != optarg + strlen(optarg)){
*arg = malloc(strlen(optarg));
strcpy((char*)*arg,optarg);
} else *arg = (void*)tmp;
}
int64 main(int argc, char** argv){
int opt, num = 0;
void *a,*b;
char* e;
void* (*func2)(void*,void*),
(*func1)(void*),
(*func0)(), *func = 0;
while((opt = getopt_long(argc,argv,"f:h:n:a:b:",longopts,NULL)) != -1){
switch (opt){
case 'h':
fprintf(stderr,"%s",help);
exit(0);
case 'f':
func = dlsym(NULL,optarg);
break;
case 'n':
num = atoi(optarg);
if (num > 2) exit(1);
break;
case 'a':
strtoa(&a,optarg);
break;
case 'b':
strtoa(&b,optarg);
break;
}
}
if(func != 0){
switch (num){
case 0:
func0 = func;
(*func0)();
break;
case 1:
func1 = func;
(*func1)(a);
break;
case 2:
func2 = func;
(*func2)(a,b);
}
}
return 0;
}
Запускает любую функцию линукс, содержащую до 2-х аргументов. В хелпе все написано. Собирать так c флагом -dl.
Использовать так:
a.out -f sleep -n 1 -a 1 - sleep на 1 секунду
a.out -f printf -n 1 -a OK - выводит без конца строки
вдохновлен этим:
http://govnokod.ru/13763
Я, crastinus97, говорю вам: этого способа нет в man. Я его сам открыл.
+135
return ((((num & ~(0xFFFFFFFF << n)) >> (n - 0x1)) & 0x1) == 0x1) ? ((num & ~(0xFFFFFFFF << n)) ^ ~(0xFFFFFFFF << n)) + 0x1 : (num & ~(0xFFFFFFFF << n));