21:30
ОбновитьСмайлыУправление мини-чатом
МИНИ-ЧАТ
Главная страница!

 



 
          





Рекомендуем:





Последние Файлы GTA 4 Последние Файлы GTA-MP Реклама
Скрипт GTA 4 элементы Watch... 07.09.2014
Ferrari 360 Spider [EPM con... 13.12.2013
Porsche Cayenne Turbo 2012 ... 13.12.2013
Shelby Terlingua Mustang v1... 13.12.2013
Hamann Lamborghini Gallardo... 27.10.2013
[GM] The Big PEN1:LS v2.00 ... 04.12.2017
Dgun (AvnanceRP,SampRP,Dimo... 19.03.2016
SAMP скрипт SX Events (MySQ... 03.03.2016
Карта ASL мэрия для SAMP се... 03.03.2016
AIM для SA-MP 0.3.7 22.02.2016
  • Страница 1 из 1
  • 1
Модератор форума: AXE, Weddew  
Enum в аргументах (тест на знания)
AirKiteДата: Среда, 25.04.2012, 05:30 | Сообщение # 1
Долгожитель
Группа: I'm V.I.P.
Сообщений: 1671
Награды: 21
Город: Новосибирск
Репутация: 2070
Замечания: 0%
Статус:
Собственно стало интересно, насколько быстро можно получить ответ на такой простой вопрос, в русском сообществе. Только что задавал его на sa-mp.com. В качество ответа я получил целых 2 поста, на которые невозможно смотреть без facepalm. В итоге к ответу пришёл сам, интуитивно. Либо это где то у меня уже лежало в памяти, но я забыл.

Собственно вопрос решение задачи:
Code

enum enum_test{
    test,
    test_string[128],
    lol
};
new test[123][enum_test];

Simple_test_int(count, enum_c) {
    return test[count][enum_c];
}


Code

warning 213: tag mismatch // на строке: return test[playerid][enum_c]


UPD: Хах, далее опять наткнулся на мелочь, спасибо [RD]Chez, по ходу шуток натолкнулись на поправку ещё дополнительной проблемы :D Так что иногда идеи которые на первый взгляд выглядят CRAZY могут быть очень даже адекватными crazy



[1337GAMES] Easy RP
(SAMP SERVER, DEVELOPMENT, NOT SAMP-RP, SMART LIFE)


Jabber: airkite@qip.ru
[Addon] QuickBinder
[FS] Online Players Record


Сообщение отредактировал AirKite - Среда, 25.04.2012, 06:11
VagrantДата: Среда, 25.04.2012, 09:59 | Сообщение # 2
Уважаемый человек
Группа: I'm V.I.P.
Сообщений: 904
Награды: 21
Город: Находка
Репутация: 489
Замечания: 0%
Статус:
Вопрос хороший, просидел 20 минут, пока не догадался до такого способа. Кстати говоря, как-то давно видел такое в одном скрипте.
Quote (AirKite)
return test[playerid][enum_c]

return test[count][enum_test:enum_c]
Code
enum enum_test
{
       test,
       test_string[128],
       lol
};

new what[123][enum_test];

Simple_test_int(count, enum_c)
{
       return what[count][enum_test:enum_c];
}

Как я понял, это используется для указания определённой нумерации, то есть енума. При таком использовании даже удобнее, так как функцию можно уже писать: Simple_test_int(120, test);
Code
Simple_test_int(count, enum_test:enum_c) // Ну или указать вот так.
{
       return what[count][enum_c];
}



Человек учась ходить падает, и только падая, он учится ходить!
Мои работы:
[GM] W.F.S.A. V. 1.0 - 100%
[GM] San Fierro Enigmatic (TDM) V. 1.0 - 100%
[FS] Clan House V. 1.0 - 100%
[FS] Save Car Tun System V. 1.0 - 100%
[FS] Vagrant Anti-CapsLock V. 2.1 - 100%
[FS] Vagrant Anti-Advertise V. 1.1, V. 2.0 - 100%
[APP] SA-MP Interior Viewer V. 1.0 - 100%

Принимаю заказы на помощь в скриптинге!


Сообщение отредактировал Vagrant - Среда, 25.04.2012, 10:12
AirKiteДата: Среда, 25.04.2012, 10:11 | Сообщение # 3
Долгожитель
Группа: I'm V.I.P.
Сообщений: 1671
Награды: 21
Город: Новосибирск
Репутация: 2070
Замечания: 0%
Статус:
Vagrant, всё верно. Только я походу подогнался что Simple_test_int(count, const enum_c) нужен о_О. Я с просони, а [RD]Chez наоборот с засони crazy А казалось:
Quote (AirKite)
иногда идеи которые на первый взгляд выглядят CRAZY могут быть очень даже адекватными


Тема на sa-mp.com забавней: http://forum.sa-mp.com/showthread.php?p=1820449



[1337GAMES] Easy RP
(SAMP SERVER, DEVELOPMENT, NOT SAMP-RP, SMART LIFE)


Jabber: airkite@qip.ru
[Addon] QuickBinder
[FS] Online Players Record
VagrantДата: Среда, 25.04.2012, 10:19 | Сообщение # 4
Уважаемый человек
Группа: I'm V.I.P.
Сообщений: 904
Награды: 21
Город: Находка
Репутация: 489
Замечания: 0%
Статус:
AirKite, const? У меня был первый вариант именно с const. Но потом я подумал зачем здесь конст, если номер столбца никак не изменится в любом случае. Или может я что-то про const не знаю.
На sa-mp.com больше всего убил этот ответ:
Quote
enum enum_test{
test,
test_string[128],
lol
};
new test[123][enum_test];
Simple_test_int(count, enum_c) {
return test[count][enum_c];
{}
}

Гениально мать его. :D
Ну следующий ответ в принципе и не удивил, особенно после первого этого стоило ожидать. Как по моему большинство американцев любит писать в стиле: new test [ 123 ] [ enum_test ] ;
Добавил:
Я думаю правильнее всё таки будет второй мой вариант:
Code
Simple_test_int(count, enum_test:enum_c)
{
      return what[count][enum_c];
}

Так как если написать:
Code
Simple_test_int(count, const enum_c)
{
      return what[count][enum_test:enum_c];
}

А потом далее использовать функцию так: Simple_test_int(120, 8); То компилятор промолчит. А иначе, как в первом варианте, будет такой же варнинг :) (warning 213: tag mismatch), что бы не допускать лишних ошибок в моде, это будет полезнее.



Человек учась ходить падает, и только падая, он учится ходить!
Мои работы:
[GM] W.F.S.A. V. 1.0 - 100%
[GM] San Fierro Enigmatic (TDM) V. 1.0 - 100%
[FS] Clan House V. 1.0 - 100%
[FS] Save Car Tun System V. 1.0 - 100%
[FS] Vagrant Anti-CapsLock V. 2.1 - 100%
[FS] Vagrant Anti-Advertise V. 1.1, V. 2.0 - 100%
[APP] SA-MP Interior Viewer V. 1.0 - 100%

Принимаю заказы на помощь в скриптинге!


Сообщение отредактировал Vagrant - Среда, 25.04.2012, 10:32
МолорищеДата: Среда, 25.04.2012, 10:55 | Сообщение # 5
Молор
Группа: Продвинутые
Сообщений: 427
Награды: 11
Город: Санкт Петербург
Замечания: 0%
Статус:
[off]
Quote (AirKite)
const

Объясните наконец, что это вообще значит?[/off]

Че то я не допер, что тебе вообще надо от этого enum'а, AirKite



Мне нечего делать.
AirKiteДата: Среда, 25.04.2012, 11:04 | Сообщение # 6
Долгожитель
Группа: I'm V.I.P.
Сообщений: 1671
Награды: 21
Город: Новосибирск
Репутация: 2070
Замечания: 0%
Статус:
Vagrant, смотря как использовать. твой вариант enum_test:enum_c не подойдёт для what[count][enum_c+1]
[off]
Quote (Fiskar)
const

Объясните наконец, что это вообще значит?

Тебя прям как в гугле забанили crazy

const помогает избежать перезаписи данных. погугли "const", почитай [/off]



[1337GAMES] Easy RP
(SAMP SERVER, DEVELOPMENT, NOT SAMP-RP, SMART LIFE)


Jabber: airkite@qip.ru
[Addon] QuickBinder
[FS] Online Players Record


Сообщение отредактировал AirKite - Среда, 25.04.2012, 11:10
GeryyДата: Среда, 25.04.2012, 11:10 | Сообщение # 7
Советчик
Группа: Ангел Хранитель
Сообщений: 1187
Награды: 24
Город: Москва
Репутация: 785
Замечания: 0%
Статус:
Quote (AirKite)
смотря как использовать. твой вариант enum_test:enum_c не подойдёт для what[count][enum_c+1]

не, ну в общем-то конечно пойдет, хоть ругаться и будет. Но зачем это надо вообще? енумы для того и сделаны, чтоб не париться с цифрами.



Добавить SAMP сервер в спец. вкладку HOSTED 450-500 р.
VagrantДата: Среда, 25.04.2012, 11:50 | Сообщение # 8
Уважаемый человек
Группа: I'm V.I.P.
Сообщений: 904
Награды: 21
Город: Находка
Репутация: 489
Замечания: 0%
Статус:
Quote (AirKite)
Vagrant, смотря как использовать. твой вариант enum_test:enum_c не подойдёт для what[count][enum_c+1]

В принципе тоже верно.
Quote (Geryy)
не, ну в общем-то конечно пойдет, хоть ругаться и будет. Но зачем это надо вообще? енумы для того и сделаны, чтоб не париться с цифрами.

Например при использовании циклов. Пример:
Quote
enum pweap
{
pWe1,
pAm1,
pWe2,
pAm2,
pWe3,
pAm3,
pWe4,
pAm4,
pWe5,
pAm5
};

new PlayerWeap[MAX_PLAYERS][pweap];

InfoAmmo(playerid, const enum_c)
{
return PlayerWeap[playerid][pweap:enum_c];
}

for(new playerid=0,i=0;i<11;i++)
{
printf("%d: %d",i,InfoAmmo(playerid,i+1));
i++;
}

Проверяем кол-во патронов у игрока. Может и не лучший пример, но кто знает какие задачи будут стоять.

Fiskar, const - это константа, то есть при объявлении константы const val = 100; это тоже самое что если ты напишешь #define val 100, при использовании позволяет избежать перезаписи данных. Так как константа не может быть изменена, на то она так и называется.
Quote (Википедия)

Конста́нта в программировании — способ адресования данных, изменение которых рассматриваемой программой запрещено.



Человек учась ходить падает, и только падая, он учится ходить!
Мои работы:
[GM] W.F.S.A. V. 1.0 - 100%
[GM] San Fierro Enigmatic (TDM) V. 1.0 - 100%
[FS] Clan House V. 1.0 - 100%
[FS] Save Car Tun System V. 1.0 - 100%
[FS] Vagrant Anti-CapsLock V. 2.1 - 100%
[FS] Vagrant Anti-Advertise V. 1.1, V. 2.0 - 100%
[APP] SA-MP Interior Viewer V. 1.0 - 100%

Принимаю заказы на помощь в скриптинге!


Сообщение отредактировал Vagrant - Среда, 25.04.2012, 11:56
LatronДата: Среда, 25.04.2012, 13:15 | Сообщение # 9
Группа: I'm V.I.P.
Сообщений: 2115
Награды: 22
Город: Орел
Репутация: 1604
Замечания: 0%
Статус:
Fiskar, Конста́нта в программировании — способ адресования данных, изменение которых рассматриваемой программой запрещено. ( вики )
const - ( константа ) - постоянное значение которое не может меняться.
Например: new const array[ ] = "Lorem Ipsum";

Добавлено (25.04.2012, 13:15)
---------------------------------------------
Оу, Vagrant, не заметил что ты уже дал ответ))


Моё портфолио

Мои работы:
[ Lesson ] Операторы в PAWN.
[ Lesson ] Переменная.
[ GM ] RegSys. ( Last update: 21.04.2012 )




Сообщение отредактировал Latron - Среда, 25.04.2012, 13:15
AirKiteДата: Среда, 25.04.2012, 17:09 | Сообщение # 10
Долгожитель
Группа: I'm V.I.P.
Сообщений: 1671
Награды: 21
Город: Новосибирск
Репутация: 2070
Замечания: 0%
Статус:
Quote (Vagrant)
const val = 100; это тоже самое что если ты напишешь #define val 100

Максимум только с точки зрения перезаписи, но вещи совсем разные. new const var = 100; создаёт var со значением 100, не позволяет. define обработчик компилятором равный тому же что если вы бы пробежались по исходнику заменив VAR на 100 (#define VAR 100).

Quote (Geryy)
Но зачем это надо вообще? енумы для того и сделаны, чтоб не париться с цифрами.

Так циферки никто и не предлагает использовать. Пример: Simple_test_int(123, blablabla);
В моём случае это пригодилось для создания функции, идеология которой требовала использовать постоянно 2 enum-а.
Типа:
Code
enum blabla{
      test,
      test_two,
      test2,
      test2_two,
      lol,
      lol_two
}

Используем в качестве аргумента enum Simple_test_int(test); а внутри уже обрабатываем enum_c и enum_c+1 как нам нужно.

Я мог подобное сделать #define-ом, однако как уже выше я говорил, это всего лишь автозамена. В данном случае же, я сделал не только удобность кода но и его оптимизацию.



[1337GAMES] Easy RP
(SAMP SERVER, DEVELOPMENT, NOT SAMP-RP, SMART LIFE)


Jabber: airkite@qip.ru
[Addon] QuickBinder
[FS] Online Players Record


Сообщение отредактировал AirKite - Среда, 25.04.2012, 17:11
VagrantДата: Среда, 25.04.2012, 17:37 | Сообщение # 11
Уважаемый человек
Группа: I'm V.I.P.
Сообщений: 904
Награды: 21
Город: Находка
Репутация: 489
Замечания: 0%
Статус:
Quote (AirKite)
define обработчик компилятором равный тому же что если вы бы пробежались по исходнику заменив VAR на 100 (#define VAR 100).

Позор мне, я это знаю но почему-то отложилось в моей памяти как нужная и верная информация:
Quote (Vagrant)
return test[count][enum_test:enum_c]

Так и не верная:
Quote (Vagrant)
это тоже самое что если ты напишешь #define val 100



Человек учась ходить падает, и только падая, он учится ходить!
Мои работы:
[GM] W.F.S.A. V. 1.0 - 100%
[GM] San Fierro Enigmatic (TDM) V. 1.0 - 100%
[FS] Clan House V. 1.0 - 100%
[FS] Save Car Tun System V. 1.0 - 100%
[FS] Vagrant Anti-CapsLock V. 2.1 - 100%
[FS] Vagrant Anti-Advertise V. 1.1, V. 2.0 - 100%
[APP] SA-MP Interior Viewer V. 1.0 - 100%

Принимаю заказы на помощь в скриптинге!
  • Страница 1 из 1
  • 1
Поиск:





 


 


 
Хостинг от uCoz samp.at.ua