- 1
- 2
- 3
- 4
- 5
- 6
- 7
int overflow(const char *str)
{
char buf[9000];
int res = atoi(buf);
itoa(res, buf, 10);
return strcmp(buf, str);
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+135
int overflow(const char *str)
{
char buf[9000];
int res = atoi(buf);
itoa(res, buf, 10);
return strcmp(buf, str);
}
По мотивам #17745.
+134
UInt64 unpackSizeSpec =
p->UnpackPositions[p->FolderStartFileIndex[folderIndex + 1]] -
p->UnpackPositions[p->FolderStartFileIndex[folderIndex]];
size_t unpackSize = (size_t)unpackSizeSpec;
if (unpackSize != unpackSizeSpec)
return SZ_ERROR_MEM;
Из недр lzma sdk.
По заверениям разработчиков:
> ... может использоваться любым современным 32-битным процессором (или, при определенных условиях 16-битным CPU).
Очевидно что этот код вернет SZ_ERROR_MEM на 32-разрядной платформе, если unpackSizeSpec выходит за границы 32-битного числа.
На самом то деле все логично - пользователь просто посылается на хуй, если его нищебродское устройство не тянет такого толстого архива, но тогда утверждение разработчиков о безпроблемном использовании на любой кофеварке становится пиздежью.
+138
typedef enum { SUCCESS = 0, NOTNUMBER = 1, BOUNDS = 2, EOFREACHED = 3 } rdstat_t;
int flush_line(FILE *stream) {
int ch;
do {
ch = fgetc(stream);
} while (ch != EOF && ch != '\n');
return ch;
}
/* enough to contain (1 + length of ASCII string of SIZE_MAX
decimal representation) characters */
#define SIZE_T_BUF_SIZE 100
/* reads until newline or EOF, writes (size_t *out) if success */
rdstat_t read_size_t(FILE *stream, size_t *out) {
char str_SIZE_MAX[SIZE_T_BUF_SIZE];
snprintf(str_SIZE_MAX, SIZE_T_BUF_SIZE, "%zu", SIZE_MAX);
char buf[SIZE_T_BUF_SIZE];
if (!fgets(buf, SIZE_T_BUF_SIZE, stream))
return EOFREACHED;
if (buf[strlen(buf) - 1] != '\n') {
flush_line(stream);
return NOTNUMBER;
}
buf[strlen(buf) - 1] = 0;
char *ch;
for (ch = buf; *ch; ++ch)
if (!isdigit(*ch))
return NOTNUMBER;
if (strlen(buf) == strlen(str_SIZE_MAX) && strcmp(buf, str_SIZE_MAX) > 0)
return BOUNDS;
sscanf(buf, "%zu", out);
return SUCCESS;
}
Наваял функцию для чтения size_t из файла с защитой от дурака (писал код будучи больным, чесслово).
Ничего умнее печати SIZE_MAX в строчку и лексикографического сравнения для проверки границ введенного числа не придумал %)
+133
int start()
{
string filename = "GBPJPY.hst";
int i_unused[30];
int FILE = FileOpenHistory(filename, FILE_READ|FILE_BIN);
FileSeek(FILE, 0, SEEK_SET);
int version = FileReadInteger (FILE, LONG_VALUE);
string c_copyright = FileReadString (FILE, 64);
string name = FileReadString (FILE, 12);
int period = FileReadInteger (FILE, LONG_VALUE);
int i_digits = FileReadInteger (FILE, LONG_VALUE);
int timesign = FileReadInteger (FILE, LONG_VALUE); //timesign
datetime last_sync = FileReadInteger (FILE, LONG_VALUE); //last_sync
FileReadArray (FILE, i_unused, 0, 13);
Print("Version = ", version);
Print("c_copyright = ", c_copyright);
Print("Equity = ", name);
Print("period = ", period);
Print("i_digits = ", i_digits);
Print("timesign = ", TimeToStr(timesign, TIME_DATE|TIME_SECONDS));
Print("last_sync = ", last_sync);
Print("i_unused = ", i_unused[0]);
Print("i_unused = ", i_unused[1]);
Print("i_unused = ", i_unused[2]);
Print("i_unused = ", i_unused[3]);
Print("i_unused = ", i_unused[4]);
Print("i_unused = ", i_unused[5]);
Print("i_unused = ", i_unused[6]);
Print("i_unused = ", i_unused[7]);
Print("i_unused = ", i_unused[8]);
Print("i_unused = ", i_unused[9]);
Print("i_unused = ", i_unused[0]);
Print("i_unused = ", i_unused[11]);
Print("i_unused = ", i_unused[12]);
Print("Time = ", FileReadInteger (FILE, LONG_VALUE));
Print("Price = ", FileReadDouble (FILE, DOUBLE_VALUE));
Print("Price = ", FileReadDouble (FILE, DOUBLE_VALUE));
Print("Price = ", FileReadDouble (FILE, DOUBLE_VALUE));
Print("Price = ", FileReadDouble (FILE, DOUBLE_VALUE));
Print("Volume = ", FileReadDouble (FILE, DOUBLE_VALUE));
Print("Time = ", FileReadInteger (FILE, LONG_VALUE));
Print("Price = ", FileReadDouble (FILE, DOUBLE_VALUE));
Print("Price = ", FileReadDouble (FILE, DOUBLE_VALUE));
Print("Price = ", FileReadDouble (FILE, DOUBLE_VALUE));
Print("Price = ", FileReadDouble (FILE, DOUBLE_VALUE));
Print("Volume = ", FileReadDouble (FILE, DOUBLE_VALUE));
Print("Time = ", FileReadInteger (FILE, LONG_VALUE));
Print("Price = ", FileReadDouble (FILE, DOUBLE_VALUE));
Print("Price = ", FileReadDouble (FILE, DOUBLE_VALUE));
Print("Price = ", FileReadDouble (FILE, DOUBLE_VALUE));
Print("Price = ", FileReadDouble (FILE, DOUBLE_VALUE));
Print("Volume = ", FileReadDouble (FILE, DOUBLE_VALUE));
Print("Time = ", FileReadInteger (FILE, LONG_VALUE));
Print("Price = ", FileReadDouble (FILE, DOUBLE_VALUE));
Print("Price = ", FileReadDouble (FILE, DOUBLE_VALUE));
Print("Price = ", FileReadDouble (FILE, DOUBLE_VALUE));
Print("Price = ", FileReadDouble (FILE, DOUBLE_VALUE));
Print("Volume = ", FileReadDouble (FILE, DOUBLE_VALUE));
FileClose(FILE);
return(0);
}
Язык программирования торгового терминала MetaTrader 4 - MQL 4 - имеет C-нотацию. Многое роднит его с языком C, поэтому пример размещаю сюда.
У меня складывается мнение, что, как и Forex - дно (днище) в мире электронной торговли, так и основная масса кода, написанного на MQL4 - образец того, как
НЕ нужно программировать! Чего стоит одна только вырвиглазная разметка вкупе с корявым непоследовательным именованием... характерная, в том числе,
и для официально поставляемых с терминалом примеров кода. Заранее прошу прощения за многострочный пример
+137
(a != b) ? a ? b = true : b = !b : b = (a == b) && a;
+137
#include <time.h>
int rrand(int start, int end)
{
int range=end-start+1;
int speed=1;
int base=0;
int rez=start;
if(range>200) speed=range/100;
while(range>=0)
{
srand(clock());
if(rand()%2) base=base+speed+1;
else base--;
rez=rez+base;
rez=(rez < start)? end-rez : rez;
rez=(rez > end)? (rez%end)+start : rez;
range=range-speed;
}
return rez;
}
случайные числа в определенном диапазоне...
+136
for (j = 0; j < NUM_DMA_BUFFERS; j++)
*(int *)dev->channel[0].virtDma[j] = 0x1235+j;
ЯННП
+101
char buf[4096];
*((char*)&buf[14]) = 0x30;
Запись значения в массив (такой способ обращения к элементу массива тщательно соблюдается на протяжении всех 25000 строк кода проекта)
+141
/* The DNS spec is officially case-insensitive, but for those times when you
*really* wanna see any and all discrepancies, by all means define this. */
#ifdef ANAL
if (strcmp (poop->name, hp->h_name) != 0) { /* case-sensitive */
#else
if (strcasecmp (poop->name, hp->h_name) != 0) { /* normal */
#endif
Из первой версии netcat'а.
+138
if (r_ptr->flags1 & (RF1_FEMALE)) my_strcpy(desc, "себя", max);
else if (r_ptr->flags1 & (RF1_MALE)) my_strcpy(desc, "себя", max);
else my_strcpy(desc, "себя", max);
Может, я чего-то не понимаю?