-Поиск по дневнику

Поиск сообщений в rss_forum_sources_ru

 -Подписка по e-mail

 

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 29.07.2007
Записей:
Комментариев:
Написано: 80


Как включить 2 и больше привилегии сразу?

Пятница, 20 Ноября 2020 г. 14:47 + в цитатник
Qraizer: Почему 512?
    PTOKEN_PRIVILEGES tp = malloc(sizeof(*tp) + sizeof(tp->Privileges[0]));

Вообще, этот т.н. POSIX style структур с переменным размером лично меня напрягает. Но уж так повелось.

Добавлено
P.S. Можно накидать макрос, чтоб каждый раз портянки не писать. Что-то типа
    #define GET_VARIADIC_ARRAY_SIZE(str, field, num) (sizeof(str)-sizeof(str::field) + sizeof(str::field[0])*(num))
    /* ... */
    PTOKEN_PRIVILEGES tp = malloc(GET_VARIADIC_ARRAY_SIZE(TOKEN_PRIVILEGES, Privileges, 2);
Не тестировал.

Добавлено
P.P.S. Если так не зайдёт, возможно, в чистом C плюсовое :: не работает, не помню, то вот так должно:
    #define GET_VARIADIC_ARRAY_SIZE(str, field, num) (sizeof(str) - sizeof(((str*)0)->field) + sizeof(((str*)0)->field[0]) * (num))
Но как-то криво выглядит.

https://forum.sources.ru/index.php?showtopic=420833&view=findpost&p=3842283

Метки:  

 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку