- 1
#define ISODD( i ) ( (((i) % 2) == 0) ? 0 : 1 )
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+145
#define ISODD( i ) ( (((i) % 2) == 0) ? 0 : 1 )
Особо выдающимся китайцам платят не построчно, а посимвольно.
+144
#include <stdio.h>
// Говнокод здесь
#define ABS(x) ((x) ? (x) : (-(x)))
int main () {
char ch = -128;
short sm = -32768;
int i = -2147483647; i--; // здесь
long long l = -9223372036854775807LL; l--; // и здесь декременты нужны
// для подавления варнингов
printf("char:\t\tABS(%hhd) = %hhd\n", ch, ABS(ch));
printf("short:\t\tABS(%hd) = %hd\n", sh, ABS(sh));
printf("int:\t\tABS(%d) = %d\n", i, ABS(i));
printf("long long:\tABS(%lld) = %lld\n", l, ABS(l));
return 0;
}
Может быть, баян, но...
Всем знакомый макрос ABS способен сделать большую гадость.
Вот вывод программы:
char: ABS(-128) = -128
short: ABS(-32768) = -32768
int: ABS(-2147483648) = -2147483648
long long: ABS(-9223372036854775808) = -9223372036854775808
+146
logit("e", "%s No Menu! Wait 5 minutes and try again.\n", whoami);
for(j=0;j<60;j++) {
sleep_ew( 5000 ); /* wait around */
}
sgram из earthworm
+144
main() {
char * what = "\
........................................ ....________\
....................................,.-'\"...................``~.,\
.............................,.-\"................................... \"-.,\
.........................,/........................................ .......\":,\
.....................,?................. .....................................,\
.................../........................................ ...................,}\
................./........................................ ..............,:`^`..}\
.............../........................................ ...........,:\"........./\
..............?.....__.................. .......................:.........../\
............./__.(.....\"~-,_..............................,:..... ...../\
.........../(_....\"~,_........\"~,_.................. ..,:........_/\
..........{.._$;_......\"=,_.......\"-,_.......,.-~-,},.~\";/....}\
...........((.....*~_.......\"=-._......\";,,./`..../\"............../\
...,,,___.`~,......\"~.,................. ...`.....}............../\
............(....`=-,,.......`........................(..... .;_,,-\"\
............/.`~,......`-...................................../\
.............`~.*-,.....................................|, ./.....,__\
,,_..........}.>-._...................................|.. ............`=~-,\
.....`=~-,__......`,............................. ....\
...................`=~-,,.,...............................\
................................`:,,.... .......................`..............__\
.....................................`=-,...................,%`>--==``\
........................................ _..........._,-%.......`\
...................................,";
int c = 0; int i = 0;
for(; i < strlen(what); i++) {
switch(what[i]) {
case '.': c++;break;
case '_': c--;break;
case '/': c *= 2; break;
case ',': c /= 2; break;
case '?': c <<= 1; break;
case '"': c >>= 1; break;
case ':': c = ~c; break;
case '*': c = -c; break;
case '`': c += 100500; break;
case '{': c -= '{'; break;
case '}': c += '}'; break;
case '-': c /= 4; break;
case '~': c <<= 4; break;
case ';': c = c & -c; break;
case '%': c = c & 0xFF; break;
case '=': c = c; /* еба! */ break;
case '^': c = c ^ -c; break;
case '$': printf("BINGOOO!!!\n"); break;
}
}
printf("FACEPALM RESULT: %i\n", c);
BINGOOO!!!
FACEPALM RESULT: 50301
+106
// процедура ввода новой даты в RTC
long __new_date()
{
date sysdate;
unsigned long str,i;
unsigned char tmpbuf[16];
// ...
nextda: __putsV("\n\rВведите новую дату: ");
__getsV(tmpbuf,10);
if(tmpbuf[0]==0) goto daok;
//проверка строки на допустимые символы '0'-'9' и '.'
for(i=0; tmpbuf[i]!=0; i++)
{ if((tmpbuf[i]>0x39 || tmpbuf[i]<0x30) && tmpbuf[i]!=0x2e) goto baddat;
}
//проверка числа в диапазоне 01-31
if(((tmpbuf[0]==0x33)&&(tmpbuf[1]>0x31)) || (tmpbuf[0]>0x33)
|| (tmpbuf[1]==0x2e) || ((tmpbuf[0]==0x30)&&(tmpbuf[1]==0x30)) ) goto baddat;
//проверка точки после числа
if((tmpbuf[2]!=0x2e) && (tmpbuf[2]!=0x0)) goto baddat;
if((tmpbuf[2]==0x0) || (tmpbuf[3]==0x00))
{ sysdate.ti_date=(tmpbuf[1]-0x30)+((tmpbuf[0]-0x30)<<4);
goto fordok; }
//проверка месяца в диапазоне 01-12
if(((tmpbuf[3]==0x31)&&(tmpbuf[4]>0x32)) || (tmpbuf[3]>0x31)
|| (tmpbuf[4]==0x2e) || ((tmpbuf[3]==0x30)&&(tmpbuf[4]==0x30)) ) goto baddat;
//проверка точки после месяца
if((tmpbuf[5]!=0x2e) && (tmpbuf[5]!=0x0)) goto baddat;
if((tmpbuf[5]==0x0) || (tmpbuf[6]==0x00))
{ sysdate.ti_date=(tmpbuf[1]-0x30)+((tmpbuf[0]-0x30)<<4);
sysdate.ti_month=(tmpbuf[4]-0x30)+((tmpbuf[3]-0x30)<<4);
goto fordok; }
//проверка года в диапазоне 00-99
if((tmpbuf[6]==0x2e) || (tmpbuf[7]==0x2e)) goto baddat;
if(tmpbuf[7]==0x00) goto baddat;
if(tmpbuf[8]==0x0)
{ sysdate.ti_date=(tmpbuf[1]-0x30)+((tmpbuf[0]-0x30)<<4);
sysdate.ti_month=(tmpbuf[4]-0x30)+((tmpbuf[3]-0x30)<<4);
sysdate.ti_year=(tmpbuf[7]-0x30)+((tmpbuf[6]-0x30)<<4);
goto fordok; }
baddat: __putsV("\n\rДата введена неверно (дд.мм.гг)");
goto nextda;
//установка новой даты
fordok:
__set_date(&sysdate);
daok:
return 0;
}
Из ПО отечественного шифродевайса. Функция получает от "оператора" время (дд.мм.гг), проверяет его на корректность и пишет в Real Time Clock.
+109
/*
* The dump header describes the contents of a crash dump. Two headers
* are written out: one at the beginning of the dump, and the other at
* the very end of the dump device. The terminal header is at a known
* location (end of device) so we can always find it. The initial header
* is redundant, but helps savecore(1M) determine whether the dump has been
* overwritten by swap activity. See dumpadm(1M) for dump configuration.
*/
#define DUMP_MAGIC 0xdefec8edU /* dump magic number */
вот такая сигнатура у крэшдампа соляриса
−34
#define _ F-->00 || F-OO--;
long F=00,OO=00;
main(){F_OO();printf("%1.3f\n", 4.*-F/OO/OO);}F_OO()
{
_-_-_-_
_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_
_-_-_-_
}
так расчитывается число пи. я не мог этого не запостить.
+105
int run_zero[] = {0xfffffffe,0xfffffffd,0xfffffffb,0xfffffff7,0xffffffef,0xffffffdf,0xffffffbf,0xffffff7f,0xfffffeff,0xfffffdff,0xfffffbff,0xfffff7ff,0xfffefff,0xffffdfff,0xffffbfff,0xffff7fff,0xfffeffff,0xfffdffff,0xfffbffff,0xfff7ffff,0xffeffff,0xffdfffff,0xffbfffff,0xff7fffff,0xfeffffff,0xfdffffff,0xfbffffff,0xf7ffffff,0xefffffff,0xdfffffff,0xbfffffff,0x7fffffff};
int run_one[] = {0x1,0x2,0x4,0x8,0x10,0x20,0x40,0x80,0x100,0x200,0x400,0x800,0x1000,0x2000,0x4000,0x8000,0x10000,0x20000,0x40000,0x80000,0x100000,0x200000,0x400000,0x800000,0x1000000,0x2000000,0x4000000,0x8000000,0x10000000,0x20000000,0x40000000,0x80000000};
int chess_code[] = {0xa5,0x5a};
Первые строки теста регистров некоего контроллера. Хорошо, что регистры не 64-разрядные, а то задолбался бы паренёк. А уж про chess_code вообще молчу. Вот так суровые российские программеры, не боящиеся лишней работы, тестируют авиационное бортовое оборудование.
+141
sprintf(name," %s", trim("рубль",0));
Функция trim(char*, int), где вторым параметром указывается с какой стороны удалять пробелы(0 - с обеих сторон)
+127
(&goodsBuff[k].name==&vmass[p].name)
Сравнение строк