C programming language

Базовые знания о С и Unix/Linux у меня где-то на уровне катания на велосипеде — когда-то научился, в последнее время пользуюсь редко, но если надо — стандартные действия на автопилоте выполняю. С недавних пор приходится расширять знания о C, начинаю понимать, что это уже далеко не тот язык, который я знал. Особенно если речь идет о расширениях, которые поддерживает gcc.

Вот, к примеру typeof — конструкция, которая позволяет получить тип выражения. Очень удобно, например, в макросах, если надо завести переменную такого же типа, как один из аргументов:

#define max(a,b)                  \
        ( { typeof (a) _a = (a);  \
            typeof (b) _b = (b);  \
            _a > _b ? _a : _b; \
          }                       \
        )

Это макрос вычисления максимума, который вычисляет каждый из своих параметров ровно один раз. Как тут обойтись без typeof?

Но и без gcc чудес хватает — знаете ли вы, что в языке С (стандарта С99) вместо токенов

[ ] { } # ##

могут использоваться токены

<: :> <% %> %: %:%:

которые называются digraphs?

09.06.2007  Метки:   Рубрики: Разработка, Языки

2 комментария

  1. Захар - 30.03.2008

    «Уже далеко не тот язык, который я знал» — в смысле, они меняются что ли? Апдейты есть? Извините за глупый вопрос, я умею только картинки в бейсике рисовать)

  2. allex - 30.03.2008

    Со времен Кернигана & Ритчи, по книге которых я первоначально знакомился с этим языком, появился стандарт С89, потом С99, да и конкретные реализации вводят свои расширения.

Написать комментарий