Spec-Zone.ru › GCC 11

Далее: Подсказки, Предыдущее: Числа с плавающей точкой, Выше: Определяемое реализацией поведение C [Оглавление][Индекс]

4.7 Массивы и указатели ¶

  • Результат преобразования указателя в целое число или наоборот (C90 6.3.4, C99 и C11 6.3.2.3).

    При преобразовании указателя в целое число отбрасываются наиболее значимые биты, если представление указателя больше типа целого числа, происходит знаковое расширение5, если представление указателя меньше типа целого числа, в противном случае биты остаются неизменными.

    При преобразовании целого числа в указатель отбрасываются наиболее значимые биты, если представление указателя меньше типа целого числа, расширение происходит в соответствии со знаковым атрибутом типа целого числа, если представление указателя больше типа целого числа, в противном случае биты остаются неизменными.

    При преобразовании указателя в целое число и обратно, результирующий указатель должен ссылаться на тот же объект, что и исходный указатель, в противном случае поведение неопределено. То есть нельзя использовать арифметику целых чисел для избежания неопределённого поведения арифметики указателей, как предписано в C99 и C11 6.5.6/8.

  • Размер результата вычитания двух указателей на элементы одного массива (C90 6.3.6, C99 и C11 6.5.6).

    Значение определяется стандартом, а тип определяется ABI.

Сноски

(5)

Будущие версии GCC могут использовать нулевое расширение или использовать определённый для целевой платформы шаблон ptr_extend. Не полагайтесь на знаковое расширение.

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-11.4.0/gcc/Arrays-and-pointers-implementation.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API