Почему лучше использовать типы данных Glib (например, gint вместо int)?

Возможный дубликат:
Почему glib переопределяет типы?

В руководстве по GTK + 2.0 я могу прочитать здесь следующее утверждение о типы данных:

Есть несколько вещей, которые вы, вероятно, заметили в предыдущих примерах, которые нужно объяснить. Gint, gchar и т. Д., Которые вы видите, являются typedef для int и char, соответственно, которые являются частью системы GLib. Это сделано, чтобы обойти эту неприятную зависимость от размера простых типов данных при выполнении вычислений.

Я не понимаю последней части этого объяснения. Почему лучше использовать типы данных Glib?


person remjg    schedule 11.12.2012    source источник


Ответы (2)


Как упоминается в руководстве, это необходимо для обеспечения переносимости. При создании кода, который использует glib в новой системе, вам нужно будет изменить только заголовочный файл с помощью typedefs, а не код, который использует эти типы.

Стандарт C99 добавил типы фиксированной ширины (int8_t, uint32_t и т. Д.), Что сделало бы типы glib устаревшими, но glib предшествует стандарту C99, что, вероятно, является причиной того, что у него есть собственный набор типов.

person Michael    schedule 11.12.2012
comment
Вот что я понял ... gint и gchar, например, просто бесполезны для переносимости. Только gint32 и все типы данных фиксированного размера, добавленные Glib, были интересны до стандарта C99, потому что они гарантируют, что переменные имеют минимально необходимый размер. Я прав ? - person remjg; 12.12.2012
comment
Возможно, ты прав. Хотя возможно, что люди полагались, например, на gint должен иметь определенный размер, или хотя бы 32 бита, или что-то в этом роде. Дело в том, что проще изменить один typedef для удовлетворения любых таких требований, чем изменять каждое место в вашем коде, где вы используете int. - person Michael; 12.12.2012
comment
Вы правы, gint и gchar не определены как определенный размер, поэтому нет причин их использовать. См. Также комментарий здесь: stackoverflow.com/questions/2800310/ - person ptomato; 12.12.2012
comment
Спасибо за ваши ответы ! - person remjg; 12.12.2012

Типы данных C сильно зависят от платформы и реализации, например, int - это размер регистра, char имеет столько же бит, сколько имеет байт, long означает не меньше, чем int, short int составляет не менее 2 байтов, но на самом деле не требует быть меньше, чем int

Таким образом, использование некоторых коротких переменных с правильными именами способствует переносимости.

И как сказано в руководстве по GTK 2.0:

Хорошим примером является "gint32", который будет преобразован в 32-битное целое число для любой данной платформы, будь то 64-битная альфа-версия или 32-битный i386. Определения типов очень просты и интуитивно понятны. Все они определены в glib / glib.h (который включается из gtk.h).

edit: Как сказал Майкл, стандарт C99 делает их устаревшими, предоставляя новые типы

person a3f    schedule 11.12.2012