В чем разница между передачей sbrk() intptr_t против int в C

Кажется, что это не влияет на функциональность sbrk, но в документации sbrk() говорится, что для этого требуется параметр intptr_t.

Это работает (или, по крайней мере, кажется, работает) при передаче типа int в качестве параметра.

Это в обычном C.

2 ответа

Решение

Пока включен правильный заголовок, вы не передаете int в sbrk(), Значение, которое вы передаете, преобразуется в intptr_t в соответствии с правилами продвижения C. Эти правила ужасно тонкие, поэтому вы должны, по крайней мере, знать, что они существуют, и избегать их использования в угловых случаях.

Как следствие, не ожидайте чего-то впечатляющего, например, аварии, когда вы проходите sbrk то, что выглядит как int, даже если intptr_t отличается от int на вашей платформе, пока заголовок, который обеспечивает sbrk() Прототип в комплекте.

intptr_t меняет размер в зависимости от архитектуры. int может или не может изменить размер в зависимости от архитектуры, то есть, если вы на 64-битной, то intptr_t ДОЛЖЕН быть 64 бит, тогда как int может быть 32 бита.

Другие вопросы по тегам