В чем разница между передачей sbrk () intptr_t против int в C - PullRequest
2 голосов
/ 21 марта 2011

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

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

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

Ответы [ 2 ]

6 голосов
/ 21 марта 2011

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

1 голос
/ 21 марта 2011

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

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

...