Сообщение от
Daniel_Cortez
Ну так давай вообще никакой ввод не будем проверять? Оставим везде неожиданное поведение, мультиплеер же и без того забагован до невозможности. Зато выиграем несколько микросекунд и это будет очень логично.
Не переходи в крайности. Я уже несколько раз сказал, что основная цель этого мероприятия - воцарение мира, спокойствия и логики.
Сообщение от
Daniel_Cortez
Хорошо, допустим. Если исключить ту неоднозначную ситуацию при нуле, то это уже совсем другое дело: логика не нарушится, разницы между подходами со sscanf2 и strval практически не останется и утверждения об удобстве того или иного подхода будут не иначе как субъективны.
Я чего-то не знаю про sscanf2? Ведь даже согласно словам Y_Less'а, основным предназначением плагина является проверка и считывание значений из строк.
С каких пор использование sscanf2 в командах стало "не по назначению"?
Ну если ты считаешь нормальным вызывать функцию по обработки строки ради того, чтоб узнать, записано ли в неё число или нет... Тогда вопросов нет. Но, как по мне, подобный подход равносилен
PHP код:
format(string, sizeof(string)), "%s", string);
А если уж для тебя является аргументом лишь скорость обработки, то можно сделать подобный код
PHP код:
#define CodeSnippet0();\
sscanf(string, "i", lol);
#define CodeSnippet1();\
switch(string[0])\
{\
case '0'..'9': lol = strval(string);\
}
Если написать в команду, например, "121s" (представим, что просто опечатался), strval спокойно извлечёт "121", в отличии от sscanf.
И скорость обработки такой строки в обоих случаях будет, примерно, одинаковая (практически всегда в пользу второго варианта).
Так же и с "чистым" числом (то бишь, если указать просто "121").
А вот если первым символом указать букву, тут обычное условие прилично вырывается вперёд. Для красоты можно условие спрятать в соответствующий макрос или функцию, роль которого будет одна: определить, ввёл ли игрок число в качестве параметра команды или текст.
Хотя я, как уже говорилось ранее, являюсь противником sscanf (конкретно в подобной ситуации) чисто из-за того, что идёт "насилование" плагина ради всего одного параметра. Задачи стоит выполнять функциями, которые предназначены конкретно под эту задачу, а не функциями, в которых предусмотрена определённая реакция на определённое условие, но которые логичнее использовать в других обстоятельствах (и, в случае с sscanf - это обработка строк с целью разбивки тех на несколько частей (как основная функция)).
Ну а по поводу бинда соглашусь, погорячился (хоть и сам, перед тем ответом, прогонял оба варианта через твой профайлер, не особо вдумался в разницу результатов)
Я не говорю, что использование sscanf в подобных случаях - смертельно плохо. Но есть реализации, при которых и обработка будет быстрее (хоть разница и мала), и код логичнее будет смотреться.