Как определить, является ли тип данных структурой?

#c #struct #sizeof

Вопрос:

Предположим, что у вас есть структура my_struct в C. Затем вы используете sizeof(my_struct) ее, чтобы узнать, сколько байтов у этой структуры. Есть ли какой-нибудь способ узнать, что my_struct это структура, просто используя sizeof() метод в C?

Например, если я хочу это выяснить my_variable 16-bit , то просто проверяю, так ли sizeof(my_variable) == 2 это .

Могу ли я сделать то же самое для struct в C?

Комментарии:

1. Конечно, нет, потому что можно иметь структуру размером, скажем, 2.

2. Нет. Зачем тебе вообще это нужно? Это ваш код, и вы знаете, что это за тип.

3. Если бы такая функция самоанализа существовала, sizeof для нее не было бы места (как «это структура?» связано с вопросом «насколько велика эта штука в байтах?»). Я не знаю о такой языковой особенности. Но мне любопытно, если бы он существовал , для чего бы вы его использовали?

4. Проверка того, что ваша переменная имеет размер 2 и «таким образом» 16 бит, все равно ничего не значит в C. Это короткая, короткая без знака, (очень короткая) строка, структура из 2 символов?

5. @Alexander, скажем, в Python, вы можете использовать проверку того, является ли значение целым числом или плавающей точкой, и передать его через другой поток управления в зависимости от результата. Хотя я все равно не могу придумать для этого действительно веской причины. Возможно, оперативная группа думает в этом направлении.

Ответ №1:

Могу ли я сделать то же самое для struct в C?

sizeof(my_variable) делает то же самое для структур, что и для неструктур.

Конкретно,

  • sizeof( my_variable ) == 2 это не значит, что переменная использует 16 бит.

    Это означает, что my_variable использует до 2 байт. Несмотря на то, что в наши дни размер байта обычно составляет 8 бит, это не всегда так. Исторически сложилось так, что их размер достигал 32 бит!

  • sizeof( my_variable ) == 2 это не означает, что переменная может хранить 16-битные числа.

    sizeof ничего не говорит о типе, кроме его размера.

Например,

sizeof( long ) sizeof( float ) и sizeof( struct { char a; int b; } ) все они могли бы вернуть один и тот же номер.