- 1
- 2
- 3
- 4
- 5
QByteArray ba;
char x;
x = 0x05;
ba.append (&x, sizeof (x));
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+55
QByteArray ba;
char x;
x = 0x05;
ba.append (&x, sizeof (x));
Qt. Продолжаем мучить QByteArray :)
+50
char parser_msg(char *data, char size)
{
//<...>
QByteArray bt;
//<...>
x=(char *) malloc(size);
bt.clear();
for (i=0; i<size; i++) {
x[i]=*data;
bt.append(*data);
*data++;
}
printf("Data parser! >> '%s'\n", bt.toHex().constData());
if (x[0]==0x06) {
//<...>
}
if (x[0]==...) {
//<...>
}
//<...>
}
Разбор команд из COM-порта. Используется Qt. QByteArray, кстати, заведен здесь только ради дебаг-принта.
При вызове функции в кач. data передается указатель, возвращаемый data() другого байтаррэя, живущего на стеке.
+54
virtual bool IsUnlockedAll(){bool temp = false;return temp^temp;};
Код с боевого проекта. Комментариев не будет.
+49
for (int i = 0; i <= 10000; i++)
{
if (a[i]=='a')
a[i] == "000";
continue;
}
Цикл, который в строке a меняет все символы 'a' на три ноля. Говнолабка одногруппницы.
+57
for (i = MAX_PATH; 5; i--){
if (CurProfileF[i] == 't' && CurProfileF[i-3] == '.'){
i = i-3;
break;
}
}
http://trac.miranda-ng.org/browser/trunk/protocols/Xfire/src/variables.cpp?rev=5315#L194
+51
std::list<COptions *> COptions::m_InstanceList;
..........
COptions::COptions()
{
for (int i = 0; i < OPTIONS_NUM; ++i)
m_OptionsCache[i].bCached = FALSE;
m_pOptionsHelperWindow = new COptionsHelperWindow(this);
simple_lock lock(m_mutex);
#ifdef _DEBUG
for (std::list<COptions *>::iterator iter=m_InstanceList.begin(); iter != m_InstanceList.end(); ++iter)
ASSERT(*iter != this);
#endif _DEBUG
m_InstanceList.push_back(this);
m_SpeedLimits[0] = m_sSpeedLimits[0];
m_SpeedLimits[1] = m_sSpeedLimits[1];
}
COptions::~COptions()
{
{
simple_lock lock(m_mutex);
std::list<COptions *>::iterator iter;
for (iter=m_InstanceList.begin(); iter != m_InstanceList.end(); ++iter) {
if (*iter == this)
break;
}
ASSERT(iter != m_InstanceList.end());
if (iter != m_InstanceList.end())
m_InstanceList.erase(iter);
}
if (m_pOptionsHelperWindow)
delete m_pOptionsHelperWindow;
m_pOptionsHelperWindow=0;
}
.......
В отладке включается тяжелый героиновый бред разработчиков FileZilla
+50
#include <deque>
#include <stdint.h>
#include <iterator>
#include <algorithm>
#include <iostream>
#include <iomanip>
using namespace std;
typedef uint32_t bt;
typedef uint64_t dbt;
typedef deque<bt> bn;
#define cat2(b,e) b##e
#define cat(b,e) cat2(b,e)
#define fsi(i,s,e) for(size_t i(s), cat(i,_end)(e); i<cat(i,_end); ++(i))
#define fe(i,c) for(auto i((c).begin()), cat(i,_end)((c).end()); i!=cat(i,_end); ++(i))
void ml10(bn& n){
n.push_front(0);
}
uint32_t ni(const bn& n, size_t i){
if(n.size()<=i)
return 0;
else
return n[i];
}
size_t ms(const bn& n1, const bn& n2){
return (max) (n1.size(), n2.size());
}
bt gr(dbt tr){
return tr & (numeric_limits<bt>::max)();
}
bt gc(dbt tr){
return (tr & (~((dbt)(numeric_limits<bt>::max)()))) >> (numeric_limits<bt>::digits);
}
void pb(bt b1, bt b2, bt lc, bt& r, bt& c){
dbt tr = ((uint64_t)b1 + b2 + lc);
r = gr(tr);
c = gc(tr);
}
void mb(bt b1, bt b2, bt lc, bt& r, bt& c){
dbt tr = ((uint64_t)b1 * b2 + lc);
r = gr(tr);
c = gc(tr);
}
bn /*constexpr*/ bi(bn n){
reverse(n.begin(), n.end());
return n;
}
bn pl(const bn& n1, const bn& n2){
bn r;
bt c=0,br=0;
size_t ms_ = ms(n1, n2);
//r.reserve(ms_+1);
fsi(i,0,ms_){
pb(ni(n1,i),ni(n2,i),c,br,c);
r.push_back(br);
}
if (c)
r.push_back(c);
return r;
}
bn ml(bn n1, const bn& n2){
bn lr, r;
bt c=0;
//r.reserve(n1.size() + n2.size() + 1);
fsi(i2,0,n2.size()){
fsi(i1, 0, n1.size()){
lr.emplace_back();
mb(n1[i1], n2[i2], c, lr[i1], c);
}
if (c){
lr.push_back(c);
c = 0;
}
r = pl(r, lr);
lr.clear();
ml10(n1);
}
return r;
}
#define STR1(x) #x
#define STR(x) STR1(x)
#define EXPECT_TRUE(expr)\
do{\
if(!(expr))\
cout<<"*****Failed test: \"" STR(expr) "\"" << endl;\
else\
cout << "Test OK: \"" STR(expr) "\"" << endl;\
}while(false)
#define TEST(expr)\
do{\
cout << "Test begined: \"" STR(expr) "\"" << endl;\
(void)(expr);\
} while (false)
И вот мой просмотр аниме закончен.
http://ideone.com/eRJ7FA
main смотри в коментах
+52
int QTabBarPrivate::indexAtPos(const QPoint &p) const
{
Q_Q(const QTabBar);
if (q->tabRect(currentIndex).contains(p))
return currentIndex;
for (int i = 0; i < tabList.count(); ++i)
if (tabList.at(i).enabled && q->tabRect(i).contains(p))
return i;
return -1;
}
currentIndex - видимо откат заплатил
PS
Cкоро всю Qt на говнокод заливать придется.
Плохое настроение или хотите поржать - открывайте исходники Qt в случайном месте - поднимаете себе настроение идиотскими решениями - профит
+57
typedef deque<uint8_t> bn;
#define cat2(b,e) b##e
#define cat(b,e) cat2(b,e)
#define fsi(i,s,e) for(size_t i(s), cat(i,cat(_fsi_end_,__LINE__))(e); i<cat(i,cat(_fsi_end_,__LINE__)); ++(i))
void ml10(bn& n){
n.push_front(0);
}
uint8_t ni(const bn& n, size_t i){
if(n.size()<=i)
return 0;
else
return n[i];
}
size_t ms(const bn& n1, const bn& n2){
return (max) (n1.size(), n2.size());
}
void pb(uint8_t b1, uint8_t b2, uint8_t lc, uint8_t& r, uint8_t& c){
uint8_t tr = (b1+b2+lc);
r = tr & 1;
c = !!(tr & 2);
}
bn bi(bn n){
reverse(n.begin(), n.end());
return n;
}
bn pl(const bn& n1, const bn& n2){
bn r;
uint8_t c=0,br=0;
fsi(i,0,ms(n1, n2)){
pb(ni(n1,i),ni(n2,i),c,br,c);
r.push_back(br);
}
if (c)
r.push_back(c);
return r;
}
bn ml(bn n1, const bn& n2){
bn r;
fsi(i,0,n2.size()){
if(n2[i])
r=pl(r,n1);
ml10(n1);
}
return r;
}
У меня к вам вопрос парни.
В нашем отделе взяли олимпиадника. За ним не следили. Он написал много кода и ушел в гугл.
Как бы за ним теперь код поправить? Хотябы конструкции языка типа for вернуть вместо например fsi?
Код не из проекта. но его. В проекте похожий и даже хуже.
Нужно типа утилиты препроцессор крестов для части макросов (все разворачивать макросы или инклудить хедеры очевидно нельзя).
+55
On Wed, 29 Oct 2014 20:29:33 +0000
via Digitalmars-d <[email protected]> wrote:
> On Wednesday, 29 October 2014 at 20:13:34 UTC, ketmar via
> Digitalmars-d wrote:
> > On Wed, 29 Oct 2014 13:07:38 -0700
> > Walter Bright via Digitalmars-d <[email protected]>
> > wrote:
> >
> >> There are still two string types, something you can't quite
> >> escape dealing with.
> > and D has three string types. it's even better than C++!
>
> Only three? C++ has seven:
>
> 1. const char* /* zero terminated single byte*/
> 2. const char* /* zero terminated multi byte */
> 3. const wchar_t* /* zero terminated wide */
> 4. std::string
> 5. std::wstring
> 6. std::u16string
> 7. std::u32string
ah, D has those 'char*' family too, but i don't count them as string
types. ok, C++ wins. again. ;-)
Хоть и не код, но смешно.
Источник: http://forum.dlang.org/thread/[email protected]?page=3