Каково влияние игнорирования типов OpenGL? - PullRequest
2 голосов
/ 13 октября 2011

Итак, я использую OpenGL, который typedefs unsigned integer -> GLuint.

По какой-то причине неправильно посыпать мою программу GLuint вместо более общего целого числа без знака или uint32_t.

Есть мысли о негативных / позитивных аспектах игнорирования typedefs?

Ответы [ 3 ]

6 голосов
/ 13 октября 2011

typedefs существуют, чтобы сделать ваш код более переносимым.Если вы когда-нибудь хотели перейти на платформу, в которой GLuint может иметь другой базовый тип (по какой-либо причине), было бы разумно использовать typedef.

2 голосов
/ 13 октября 2011

Всегда есть вероятность, что ваш код будет перенесен на платформу, где GLuint != unsigned int.Если вы собираетесь игнорировать typedefs, то, по крайней мере, добавьте некоторые проверки времени компиляции, которые приводят к ошибке компиляции, если они отличаются от ожидаемых.

1 голос
/ 13 октября 2011

В общем, смотрите приведенные выше ответы К-Балла и Чеда Ла Гуардиа, именно в этом и заключаются подобные определения типов. Это и, в некоторых случаях, чтобы скрыть фактический тип данных в случае, если API изменится в будущей ревизии (вряд ли произойдет с OpenGL, но я видел, как это произошло). В случае изменения типа данных для этого требуется перекомпиляция, но без изменения кода.
Тем не менее, нужно сказать, что разработчики библиотек часто переусердствовали в этом конкретном аспекте переносимости до глупости.

В этом конкретном случае спецификация OpenGL очень четко показывает, что такое GLuint (глава 2.4). Это целое число без знака длиной не менее 32 бит. Они не оставляют много места для интерпретации или изменения.

Поскольку нет никаких шансов, что когда-либо может быть чем-то иным, чем uint32_t (поскольку это само определение uint32_t), и нет веской причины, по которой вы не могли используйте вместо него uint32_t, если вы предпочитаете это делать (кроме использования GLuint прямо указывает, что переменная предназначена для использования с OpenGL, но не в коем случае).
В принципе, все же может быть чем-то иным, чем unsigned int, конечно, поскольку о точном размере int (кроме sizeof(long) >= sizeof(int) >= sizeof(short)) почти ничего не сказано.

...