Два подхода для определения типов данных в c.Какой из них я должен выбрать? - PullRequest
2 голосов
/ 29 декабря 2011

В программировании на языке c следует отдать предпочтение:

typedef struct
{
    Point_t points[4];
} Quad_t;

Более:

typedef Point_t Quad_t[4];

С точки зрения производительности?и лучшая практика?

Обратите внимание, что Point_t определяется следующим образом:

typedef union
{
    struct
    {
        int x;
        int y;
    };
    int coords[2];
} Point_t;

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

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

Большое спасибо заранее.Хасан.

Ответы [ 3 ]

3 голосов
/ 29 декабря 2011

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

* 1003 Е.Г. *

typedef int Value[4];

void PassByValue(Value x) // Does it really?
{
    x[0] = x[3];
}

int main(void)
{
    Value x = {1, 2, 3, 4};

    PassByValue(x); // oops - passes a _pointer_ by value
                    // values in x can be changed.
}

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

0 голосов
/ 29 декабря 2011

Вы можете столкнуться с такими проблемами, как this , если попытаетесь объявить указатель на const Quad_t.Обычно не рекомендуется (для простоты) смешивать массивы с typedef.

0 голосов
/ 29 декабря 2011

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

Однако второй подход более полезен, когда ваш код будет использоваться кем-то другим или вам нужно объяснить его кому-то, не имеющему языка Си.Я бы посоветовал взглянуть на стандарты программирования на C или книгу для обобщенных концепций кодирования (например, Code Complete 2-е издание Steve McConnell, которая является лучшей книгой о кодировании), эта ссылка может помочь.

...