Язык С в вопросах и ответах



             

Язык С в вопросах и ответах - сстр. 9


Особенно не рекомендуется
        использовать NULL там, где требуется нулевой код ASCII (NUL). Если
        необходимо, напишите собственное определение

            #define NUL '\0'

        Смотри: K&R II Разд. 5.4 c. 102.


1.9   Но не лучше ли будет использовать NULL (вместо 0) в случае, когда
      значение NULL изменяется, быть может, на компьютере с ненулевым
      внутренним представлением нулевых указателей?

О:    Нет. Хотя символические константы часто   используются вместо чисел
      из-за того, что   числа могут измениться, в данном случае   причина, по
        которой используется NULL, иная. Еще раз повторим: язык гарантирует,
        что 0, встреченный там, где по контексту подразумевается указатель,
        будет заменен компилятором на нулевой указатель. NULL используется
        только с точки зрения лучшего стиля программирования.

1.10:   Я в растерянности. Гарантируется, что NULL равен 0, а нулевой
      указатель нет?

О:    Термин "null" или "NULL" может не совсем обдуманно использоваться
      в нескольких смыслах:

      1.    Нулевой     указатель как абстрактное понятие языка, определенное
            в вопросе 1.1. Он представляется с помощью...

        2.      Внутреннее (на стадии выполнения) представление нулевого
                указателя, которое может быть отлично от нуля и различаться
                для различных типов указателей. О внутреннем представлении
                нулевого указателя должны заботиться только создатели
                компилятора.  Программистам на С это представление не
                известно, поскольку они используют...

      3.    Синтаксическое соглашение для нулевых указателей, символ
            "0". Вместо него часто используют...

      4.    Макрос NULL который с помощью #define определен      как "0"
            или "(void *)0". Наконец, нас может запутать...

      5.    Нулевой     код ASCII (NUL), в котором все биты равны нулю,      но



Содержание  Назад  Вперед