Re: Скриптинг курилка -
stabker - 06.02.2017
Не знаю, известно ли это всем. Нашел сегодня такой баг компилятора, что если внутри case любого switch объявить двух или трехмерный массив, то предшествующие ему переменные, внутри этого кейса, в дальнейших кейсах будут вести себя так, будто они уже объявлены. Иллюстрация проблемы ниже:
PHP Code:
justfortest()
{
switch(random(3))
{
case 0:
{
new normal = 1;
printf("", normal);
}
case 1:
{
new subject = 1;
/*new troublemaker[2][2] =
{
{ 1, 2 },
{ 3, 4 }
};*/
new subject_1 = 1;
printf("", subject, subject_1/*, troublemaker[0][0]*/);
}
case 2:
{
new subject = 1; //error 021: symbol already defined: "subject"
new subject_1 = 1;
printf("", subject, subject_1);
}
}
}
main()
{
justfortest();
}
Если раскомментировать все, связанное с массивом troublemaker, то в обозначенной строке 2-го кейса будет ошибка (как и во всех последующих случаях).
Re: Скриптинг курилка -
ZiGGi - 06.02.2017
Quote:
Originally Posted by stabker
Не знаю, известно ли это всем. Нашел сегодня такой баг компилятора, что если внутри case любого switch объявить двух или трехмерный массив, то предшествующие ему переменные, внутри этого кейса, в дальнейших кейсах будут вести себя так, будто они уже объявлены. Иллюстрация проблемы ниже:
PHP Code:
justfortest()
{
switch(random(3))
{
case 0:
{
new normal = 1;
printf("", normal);
}
case 1:
{
new subject = 1;
/*new troublemaker[2][2] =
{
{ 1, 2 },
{ 3, 4 }
};*/
new subject_1 = 1;
printf("", subject, subject_1/*, troublemaker[0][0]*/);
}
case 2:
{
new subject = 1; //error 021: symbol already defined: "subject"
new subject_1 = 1;
printf("", subject, subject_1);
}
}
}
main()
{
justfortest();
}
Если раскомментировать все, связанное с массивом troublemaker, то в обозначенной строке 2-го кейса будет ошибка (как и во всех последующих случаях).
|
В компиляторе от Zeex это, вроде, исправлено.
Re: Скриптинг курилка -
Diman777 - 07.02.2017
Иногда просматривая скрипты сторонних авторов - замечаю, что условие пишут по-разному. Например возьмём
strcmp:
PHP Code:
if (strcmp(dest, source, true) == 0)
if (0 == strcmp(dest, source, true))
Я пользуюсь всегда 1-ым вариантом. А 2-ой вариант это типа просто
свой стиль написания кода?
Re: Скриптинг курилка -
Romz - 08.02.2017
Quote:
Originally Posted by Diman777
Иногда просматривая скрипты сторонних авторов - замечаю, что условие пишут по-разному. Например возьмём strcmp:
PHP Code:
if (strcmp(dest, source, true) == 0)
if (0 == strcmp(dest, source, true))
Я пользуюсь всегда 1-ым вариантом. А 2-ой вариант это типа просто свой стиль написания кода?
|
Я тоже 1й вариант использую. Да, просто стиль написания, разницы никакой в данном коде нету кроме внешнего вида.
Re: Скриптинг курилка -
ZiGGi - 08.02.2017
Quote:
Originally Posted by Diman777
Иногда просматривая скрипты сторонних авторов - замечаю, что условие пишут по-разному. Например возьмём strcmp:
PHP Code:
if (strcmp(dest, source, true) == 0)
if (0 == strcmp(dest, source, true))
Я пользуюсь всегда 1-ым вариантом. А 2-ой вариант это типа просто свой стиль написания кода?
|
Использование второго варианта исключает ошибку, когда вместо двух = пишут один.
Но я думаю, что это актуально только для недавно перешедших с паскаля
PHP Code:
if (0 = strcmp(dest, source, true))
Re: Скриптинг курилка -
Romz - 08.02.2017
Quote:
Originally Posted by ZiGGi
Использование второго варианта исключает ошибку, когда вместо двух = пишут один.
|
В варианте выше все же 2 знака равно, а не один.
Re: Скриптинг курилка -
thebatya - 08.02.2017
Кто знает: ColAndreas способен обнаружить поверхность под водой (самое дно) ?
Re: Скриптинг курилка -
ZiGGi - 08.02.2017
Quote:
Originally Posted by Kolstin
В варианте выше все же 2 знака равно, а не один.
|
Я знаю, но любители паскаля по ошибке могут написать один знак, подразумевая два, использование второго варианта полностью исключает подобные ошибки.
Re: Скриптинг курилка -
stabker - 08.02.2017
Quote:
Originally Posted by thebatya
Кто знает: ColAndreas способен обнаружить поверхность под водой (самое дно) ?
|
Способен, по крайней мере недалеко от берега. Только надо начинать с позиции ниже воды, потому что воду он тоже учитывает (возвращает 20000).
Re: Скриптинг курилка -
Diman777 - 09.02.2017
На одном форуме увидел:
PHP Code:
FuncA()
{
print("вызов FuncA");
return 1;
}
FuncB()
{
print("вызов FuncB");
return 1;
}
FuncC()
{
print("вызов FuncC");
return 1;
}
FuncABC()
{
return FuncA(), FuncB(), FuncC();
}
Ранее такого никогда не видел. Как бы ничего удивительного, вызвались все 3 функции, но в чём преимущество всё в одном return перечислять?
Re: Скриптинг курилка -
ZiGGi - 09.02.2017
Quote:
Originally Posted by Diman777
На одном форуме увидел:
PHP Code:
FuncA()
{
print("вызов FuncA");
return 1;
}
FuncB()
{
print("вызов FuncB");
return 1;
}
FuncC()
{
print("вызов FuncC");
return 1;
}
FuncABC()
{
return FuncA(), FuncB(), FuncC();
}
Ранее такого никогда не видел. Как бы ничего удивительного, вызвались все 3 функции, но в чём преимущество всё в одном return перечислять?
|
Вроде как это немного уменьшает размер amx файла. Но, естественно, оно того не стоит.
Re: Скриптинг курилка -
joker2020pro - 09.02.2017
Это для любителей "оптимизации" кода в одну строку, а ещё в конце можно дописать значение, которое будет возвращено:
PHP Code:
FuncA()
{
print("вызов FuncA");
return 1;
}
FuncB()
{
print("вызов FuncB");
return 2;
}
FuncC()
{
print("вызов FuncC");
return 3;
}
FuncABC()
{
return FuncA(), FuncB(), FuncC(), 5;
}
main()
{
printf("%d", FuncABC()); // 5
}
Re: Скриптинг курилка -
Diman777 - 09.02.2017
хаха порнография какая-то, короче кому как удобно
вот
здесь я это прочёл, совет называется
Несколько действия в одном stock'e (не реклама, но поржать можно)
Re: Коллекция функций / макросов -
OKStyle - 20.02.2017
Разве заполнение массива не происходит при подобном:
Code:
new array[100] = {1, ...};
Re: Скриптинг курилка -
OKStyle - 20.02.2017
Quote:
Originally Posted by Diman777
Иногда просматривая скрипты сторонних авторов - замечаю, что условие пишут по-разному. Например возьмём strcmp:
PHP Code:
if (strcmp(dest, source, true) == 0)
if (0 == strcmp(dest, source, true))
Я пользуюсь всегда 1-ым вариантом. А 2-ой вариант это типа просто свой стиль написания кода?
|
Просто когда недоскриптеры, считающие себя опытными, пишут подобный понтокод, не понимают, что рушится вся логика построения кода. Задача: сравнить исходное с нулём, а не наоборот. Не знаю, можно ли назвать это проблемой, но безграмотность точно. Сродни тому, что пишут:
Code:
strcmp("/kill", cmdtext)
вместо:
Code:
strcmp(cmdtext, "/kill")
Re: Коллекция функций / макросов -
stabker - 20.02.2017
Quote:
Originally Posted by OKStyle
Разве заполнение массива не происходит при подобном:
Code:
new array[100] = {1, ...};
|
Если это адресовано мне, то происходит. Но такое возможно только при инициализации.
Re: Коллекция функций / макросов -
OKStyle - 20.02.2017
А дедовский?)
Code:
for(new i; i < sizeof(array); i++) array[i] = 1;
Re: Скриптинг курилка -
DartfoL - 20.02.2017
Quote:
Originally Posted by OKStyle
Сродни тому, что пишут:
вместо:
|
Эм, а какая разница? По-моему, тут как раз эстетичнее будет первый вариант
А по поводу сравнения с нулём: а нафига вообще так писать? Опять же, красивее будет так:
Код:
if(!strcmp("/cmd", cmdtext, true))
Re: Скриптинг курилка -
Stepashka - 20.02.2017
Quote:
Originally Posted by OKStyle
Просто когда недоскриптеры, считающие себя опытными, пишут подобный понтокод, не понимают, что рушится вся логика построения кода. Задача: сравнить исходное с нулём, а не наоборот. Не знаю, можно ли назвать это проблемой, но безграмотность точно. Сродни тому, что пишут:
вместо:
|
От перестановки мест слагаемых сумма не меняется.
По вашему я то же "недоскриптер", потому что последнее время я ставлю константы в начале сравнения?!
Re: Скриптинг курилка -
OKStyle - 20.02.2017
Дело не в эстетике, а логике. Код, не поддающийся логике - говнокод...