LINUX.ORG.RU

[C] typedef

 


0

0

typedef char x[2]; x p;

Изучаю С и наткнулся вот на такой typedef и меня заклинило. Не могу понять, как такое может быть. Как можно делать массив синонимом типа?

Снимите plz с ручника.

★★

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

> Не совсем. struct FILE почему-то определена в заголовочном файле %)

Э-э-э... В каком?

> Указатель на структуру это вполне позволяет.

Что позволяет? Вот есть у нас нечто вроде такого:

struct file *fp = fopen(...);

И тут на соседней платформе вместо 'struct file' будет 'int'

Можно, конечно, волевым усилием делать внутри 'struct file { int _file; }', но я не могу сказать, что мне эта идея сильно нравится.

kemm
()
Ответ на: комментарий от kemm

>> Не совсем. struct FILE почему-то определена в заголовочном файле %)

> Э-э-э... В каком?

У меня - в libio.h

> Можно, конечно, волевым усилием делать внутри 'struct file { int _file; }', но я не могу сказать, что мне эта идея сильно нравится.

Чем же?

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

> У меня - в libio.h

Хм... Ну косяк, да. 8)) Впрочем, косяк в одной реализации не влияет на ценность идеи, если он не является следствием этой идеи.

>> Можно, конечно, волевым усилием делать внутри 'struct file { int _file; }', но я не могу сказать, что мне эта идея сильно нравится.

> Чем же?

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

Хотя, безусловно, не скажу, что вариант «никогда не использовать тайпдефы» меня как-то концептуально напрягает в отличие от:

unknown_t var;
var.field = 123;

Вот это действительно ужоснах в чистом виде.

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

> И что в этом приятного? Без typedef по крайней мере понятно, что foo и bar - это структуры.

ну, не скажи. это удобно в частности для opaque pointers.

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

согласен полностью с товарищем kemm. он мою точку зрения озвучил лучше чем я. :)

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