LINUX.ORG.RU

simplejson. x=_x


0

1

Открыл посмотреть код. И не понимаю в чем смысл вот такой конструкции. Причем это встречается во многих программах, не только здесь.

typedef struct _PyEncoderObject {
    PyObject_HEAD
    PyObject *markers;
    PyObject *defaultfn;
    PyObject *encoder;
    PyObject *indent;
    PyObject *key_separator;
    PyObject *item_separator;
    PyObject *sort_keys;
    PyObject *skipkeys;
    PyObject *key_memo;
    int fast_encode;
    int allow_nan;
    int use_decimal;
} PyEncoderObject;
Почему нельзя?
struct PyEncoderObject {
    PyObject_HEAD
    PyObject *markers;
    PyObject *defaultfn;
    PyObject *encoder;
    PyObject *indent;
    PyObject *key_separator;
    PyObject *item_separator;
    PyObject *sort_keys;
    PyObject *skipkeys;
    PyObject *key_memo;
    int fast_encode;
    int allow_nan;
    int use_decimal;
};

Ответ на: комментарий от quasimoto

Насколько я понял автор создал структуру _PyEncoderObject , а потом дал её синоним PyEncoderObject . То есть PyEncoderObject *myObject; отработает валидно в обоих случаях.

Chubakur ★★
() автор топика
Ответ на: комментарий от Chubakur

То есть PyEncoderObject *myObject; отработает валидно в обоих случаях.

Ты бы хоть попробовал.

tailgunner ★★★★★
()
Ответ на: комментарий от Chubakur

Насколько я понял автор создал структуру _PyEncoderObject , а потом дал её синоним PyEncoderObject

Учитывая, что _PyEncoderObject не рекурсивна он мог написать

typedef struct {
    // ...
} PyEncoderObject;

typedef это синоним типа. Например, определение typedef unsigned int ui; приведёт к заменам ui -> unsigned int, точно также первый typedef делает PyEncoderObject -> struct { ... }.

quasimoto ★★★★
()
Ответ на: комментарий от Chubakur

то есть, будь это C++ разницы бы не было?

Да, в С++ разницы не было бы, там общее пространство имён для типов (встроенных и определённых пользователем).

Begemoth ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.