В чем разница между передачей 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 бита.