Какие наиболее распространенные расширения существуют (или используются) для ANSI C? - PullRequest
2 голосов
/ 02 декабря 2009

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

Ответы [ 5 ]

4 голосов
/ 02 декабря 2009

Комментарии в стиле C ++ / ISO-C на сегодняшний день: //

2 голосов
/ 02 декабря 2009

Ну, это зависит от того, имеете ли вы в виду C89 или C99, когда говорите «ANSI C». Поскольку большинство основных реализаций еще не полностью совместимы с C99, я предполагаю, что C89.

В этом случае я бы сказал (не включая конкретные API, такие как POSIX или BSD Sockets):

  • long long должно быть самым распространенным расширением;
  • с последующим разрешением доступа к union членам, отличным от последнего написанного;
  • inline вероятно там;
  • snprintf доступно во многих местах;
  • разрешено приведение между указателями на функции и пустыми указателями;
  • alloca

Редактировать: Ах, да, как я мог забыть вездесущий комментарий в стиле //.

1 голос
/ 02 декабря 2009

Ряд компиляторов допускают анонимные структуры внутри анонимных союзов, что полезно для некоторых вещей, например ::10000

struct vector3
{
    union
    {
        struct
        {
            float x, y, z;
        };
        float v[3];
    };
};

// members can now be accessed by name or by index:
vector3 v;
v.x = 1.0f; v.y = 2.0f; v.z = 3.0f;
v.v[0] = v.v[1] = v.v[2] = 0.0f;
1 голос
/ 02 декабря 2009

В одном из печально известных компиляторов для встроенного C вы можете указывать little-или big-endian для типа структуры независимо от предпочтения процессора. Очень удобно для написания драйверов устройств, если вы не помните, чтобы не получить доступ к одному из полей через, скажем, int*, который забывает порядок байтов.

Вы серьезно относитесь к матрице функций? Как вы думаете, у ТАКИХ членов нет ничего лучше?

...