- 1
- 2
- 3
% if ($ARGS{standalone_bhv}) {} else {
%# Что-то делаем
% }
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−88
% if ($ARGS{standalone_bhv}) {} else {
%# Что-то делаем
% }
Mason. Автор явно знает толк..
+132
Было:
typedef struct {
int range; /*enabled flag*/
union {
struct {
unsigned str_length;
};
struct {
long i_min;
long i_max;
};
struct {
double d_min;
double d_max;
};
/* ... */
};
} wlp_range_t;
#define WLP_NO_RANGE() { .range = FALSE }
#define WLP_STRING_LENGTH(length) { .range = TRUE, .str_length = length}
#define WLP_INT_RANGE(min, max) { .range = TRUE, .i_min = min, .i_max = max }
#define WLP_FLOAT_RANGE(min, max) { .range = TRUE, .d_min = min, .d_max = max }
Стало:
typedef struct {
int range; /*enabled flag*/
struct {
struct {
unsigned str_length;
};
struct {
long i_min;
long i_max;
};
struct {
double d_min;
double d_max;
};
/* ... */
};
} wlp_range_t;
#define WLP_NO_RANGE() { B_FALSE, { {0} } }
#define WLP_STRING_LENGTH(length) { B_TRUE, { {length} } }
#define WLP_INT_RANGE(min, max) { B_TRUE, { {0}, {min, max} } }
#define WLP_FLOAT_RANGE(min, max) { B_TRUE, { {0}, {0, 0}, {min, max} } }
#define WLP_SIZE_RANGE(min, max) { B_TRUE, { {0}, {0, 0}, {0.0, 0.0}, {min, max} } }
/* ... */
Такая вот бяка получилась при портировании проекта с GCC на Visual C. А все потому, что:
1. ISO C++03 8.5.1[dcl.init.aggr]/15:
| When a union is initialized with a brace-enclosed initializer,
| the braces shall only contain an initializer for the first member of the union.
2. Visual C не поддерживает designated initializers
+112
final Transform starscream = root.getLocalTransform();
final Transform skywarp = starscream.clone();
+102
originalTransform
final Transform starscream = root.getLocalTransform();
final Transform skywarp = transform.clone();
+16
#include <iostream>
using namespace std;
struct T{int a;T(){cout<<"T"<<this<<endl;}~T(){cout<<"~T"<<this<<endl;}};
struct D:public T{int b;D(){cout<<"D"<<this<<endl;}~D(){cout<<"~D"<<this<<endl;}};
int main() {
T* a = new D[2];
cout<<"mission failure"<<endl;
delete[] a;
return 0;
}
Писал тест специально для Тараса:
Виртуальный деструктор в базовых классах нужен:
*Для вызова деструкторов всех потомков. Иногда это не нужно, тк поля структуры тривиальны. Согласен с Тарасом.
*Для правильного выбора перегруженного оператора delete. Создал одним менеджером памяти, а удалил в другой - это плохо. Но также бывает редко и только в специфичных проектах.
Но вот то, что демонстрируется в этом примере - думаю чего-нибудь такого создатели той библиотеки, что ковырял Тарас, и опасались.
Не просто было вызван деструктор только для предков, забыв о деструкторах потомков, но и:
*Деструктор предков был вызван для this не по тем адресам, где расположены объекты.
Не удивлюсь, если:
*В некоторых кулхацкерских реализациях менеджеров памяти будет удален буфер меньшего размера и куча попортится или оставшаяся не удаленная часть массива в куче просто утекет.
http://liveworkspace.org/code/2X3MR0$8
+156
function postGameOrder(option) {
// 48 cтрок кода
if (option == 1) {
if (!confirm("Are you sure you want to save this configuration?")) {
return false;
}
}
// 45 строк кода
}
P.S. Умолчу уже о том, что среди тех 48 и 45 строк кода происходит обращение к глобальным переменным.
На публикацию же вдохновило то, что вот это обращение к option — единственное во всей функции.
+136
i = 0;
while ((p_c = strchr(&str[i], c)) != NULL) {
k = p_c - str;
for (j = 0; j < k - i; j++)
putchar(' ');
putchar('*');
i = k + 1;
}
putchar('\n');
очень простой способ подчеркнуть определённые символы в массиве знаков
−84
protected override function onLoaded() : void {
super.onLoaded();
var sleepComplete : Function = function () : void {
closeWindow();
};
onGuest ();
sleep.run( 1000, sleepComplete )
}
+73
if (jsonValues.toString().contains("acctContext") == true) {
try {
objectRelMethod = impl.provisionDevice(
jsonValues.getString("acctContext"),
jsonValues.getString("persoIdentityRequest"));
}catch(JSONException e){
objectRelMethod = impl.provisionDevice(null, null);
}
}
и туда же... и это называется гордым словом "мидл"...
+81
if (request.equals("") || request == null) {
Response.status(Response.Status.NO_CONTENT).build();
}
ну сколько можно...