Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 10 из 10
  1. #1
    Аватар для nitecore
    Пользователь

    Статус
    Оффлайн
    Регистрация
    06.04.2021
    Сообщений
    7
    Репутация:
    0 ±

    sizeof элемента в enum

    Привет всем еще раз.

    Можно ли узнать размер какого-либо элемента из enum?

    Например:

    1. enum SOME_ENUM
    2. {
    3. some_element[128],
    4. any_element[64]
    5. }


    как узнать размеры some_element и any_element?

  2. #2
    Аватар для Shaolinka
    Пользователь

    Статус
    Оффлайн
    Регистрация
    19.01.2020
    Сообщений
    69
    Репутация:
    8 ±
    PHP код:
    printf("%d, %d"sizeof SOME_ENUM:some_elementsizeof SOME_ENUM:any_element); 
    ?
    Последний раз редактировалось Shaolinka; 06.04.2021 в 20:19.

  3. #3
    Аватар для nitecore
    Пользователь

    Статус
    Оффлайн
    Регистрация
    06.04.2021
    Сообщений
    7
    Репутация:
    0 ±
    Цитата Сообщение от Shaolinka Посмотреть сообщение
    PHP код:
    printf("%d, %d"sizeof SOME_ENUM:some_elementsizeof SOME_ENUM:any_element); 
    ?

    [ ERROR ] Line 11: invalid symbol name "SOME_ENUM"
    [WARNING] Line 11: expression has no effect
    [ ERROR ] Line 11: invalid symbol name "SOME_ENUM"
    [WARNING] Line 11: expression has no effect
    [ ERROR ] Line 11: expected token: ";", but found ")"
    [ FATAL ] Line 11: too many error messages on one line

  4. #4
    Аватар для Shaolinka
    Пользователь

    Статус
    Оффлайн
    Регистрация
    19.01.2020
    Сообщений
    69
    Репутация:
    8 ±
    Цитата Сообщение от nitecore Посмотреть сообщение
    [ ERROR ] Line 11: invalid symbol name "SOME_ENUM"
    [WARNING] Line 11: expression has no effect
    [ ERROR ] Line 11: invalid symbol name "SOME_ENUM"
    [WARNING] Line 11: expression has no effect
    [ ERROR ] Line 11: expected token: ";", but found ")"
    [ FATAL ] Line 11: too many error messages on one line
    PHP код:
    printf("%d, %d"sizeof _:some_elementsizeof _:any_element); 

  5. #5
    Аватар для nitecore
    Пользователь

    Статус
    Оффлайн
    Регистрация
    06.04.2021
    Сообщений
    7
    Репутация:
    0 ±
    Цитата Сообщение от Shaolinka Посмотреть сообщение
    PHP код:
    printf("%d, %d"sizeof _:some_elementsizeof _:any_element); 

    [ ERROR ] Line 9: invalid symbol name "_"
    [WARNING] Line 9: expression has no effect
    [ ERROR ] Line 9: invalid symbol name "_"
    [WARNING] Line 9: expression has no effect
    [ ERROR ] Line 9: expected token: ";", but found ")"
    [ FATAL ] Line 9: too many error messages on one line

  6. #6
    Аватар для totes.bild
    Пользователь

    Статус
    Оффлайн
    Регистрация
    07.04.2021
    Сообщений
    1
    Репутация:
    1 ±
    1. enum SomeEnum
    2. {
    3. FirstConst[100],
    4. SecondConst[150]
    5. // other constants..
    6. };
    7.  
    8. new someVar[SomeEnum];
    9.  
    10. main()
    11. {
    12. // output: 100, 150
    13. printf("%i, %i", sizeof(someVar[FirstConst]), sizeof(someVar[SecondConst]));
    14. }

  7. Пользователь сказал cпасибо:
    nitecore (20.04.2021)
  8. #7
    Аватар для Pa4enka
    Пользователь

    Статус
    Оффлайн
    Регистрация
    22.04.2016
    Адрес
    Украина
    Сообщений
    157
    Репутация:
    35 ±
    В данном случае, у тебя в энуме находятся константы, а константа не может иметь размера. Поэтому, юзай вариант от totes.bild.

  9. #8
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Так же, если что, вычислить "размер" члена перечисления можно так:

    1. enum SOME_ENUM
    2. {
    3. some_element[128],
    4. any_element[64]
    5. }
    6.  
    7. main()
    8. {
    9. printf("some_element: %i", _:any_element-_:some_element);
    10. printf("any_element: %i", _:SOME_ENUM-_:any_element);
    11. }


    Хотя не знаю где конкретно этот метод может пригодиться в коде.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  10. 2 пользователя(ей) сказали cпасибо:
    nitecore (20.04.2021) Pro_Coder (07.04.2021)
  11. #9
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2590 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Так же, если что, вычислить "размер" члена перечисления можно так:

    1. enum SOME_ENUM
    2. {
    3. some_element[128],
    4. any_element[64]
    5. }
    6.  
    7. main()
    8. {
    9. printf("some_element: %i", _:any_element-_:some_element);
    10. printf("any_element: %i", _:SOME_ENUM-_:any_element);
    11. }
    Такой подход сработает только если знаешь, в каком порядке расположены элементы перечисления. Если же, к прмеру, добавить в конце SOME_ENUM новый элемент, то вычисление размера для any_element сломается.

    В целом, согласен с вариантом totes.bild, с той лишь оговоркой, что массив someVar стоило объявить с помощью ключевого слова stock, чтобы избежать варнинга, если этот массив больше нигде не используется (да, компилятор не считает sizeof(someVar) за использование массива).
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  12. #10
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Такой подход сработает только если знаешь, в каком порядке расположены элементы перечисления. Если же, к прмеру, добавить в конце SOME_ENUM новый элемент, то вычисление размера для any_element сломается.
    Это понятно. Я потому и написал, что особого применения такому способу не вижу. Это, скорее, как наглядная демонстрация того, что все члены перечисления вычисляются друг из друга (криво сформулировал, но, думаю, будет понятно о чём я).
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •