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



             

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



              !expr       на самом деле   эквивалентно      expr?0:1

      Читателю предлагается в качестве упражнения показать, что

              if(!p)      эквивалентно         if(p == 0)

      Хотя "сокращения" типа if(p) совершенно  корректны, кое-кто считает
      их использование дурным стилем.

      См. также вопрос 8.2.

        Смотри: K&R II Разд. A7.4.7 c. 204; H&S Разд. 5.3 c. 91; ANSI
        Разд. 3.3.3.3,  3.3.9, 3.3.13, 3.3.14, 3.3.15, 3.6.4.1, и
      3.6.5 .


1.8:  Если "NULL" и "0" эквивалентны,    то какую форму из двух использовать?

О:    Многие программисты верят, что "NULL" должен использоваться во всех
        выражениях, содержащих указатели как напоминание о том, что значение
        должно рассматриваться как указатель. Другие же чувствуют, что
        путаница, окружающая "NULL" и "0", только усугубляется, если "0"
        спрятать в операторе #define и предпочитают использовать "0" вместо
      "NULL".     Единственного ответа не существует. Программисты на С должны
        понимать, что "NULL" и "0" взаимозаменяемы и что "0" без
        преобразования типа  можно без сомнения использовать при
        инициализации, присваивании и сравнении.  Любое использование "NULL"
        (в противоположность "0" ) должно рассматриваться как ненавязчивое
        напоминание, что используется указатель; программистам не нужно
        ничего делать (как для своего собственного понимания, так и для
        компилятора) для того, чтобы отличать нулевые указатели от целого
        числа 0.  NULL _нельзя_ использовать, когда необходим другой тип нуля.
            Даже если это и будет работать, с точки зрения стиля
        программирования это плохо.(ANSI позволяет определить NULL с помощью
        #define как (void *)0.  Такое определение не позволит использовать
        NULL там, где не подразумеваются указатели).


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