Forward declarations in C?
От:
Аноним
Дата: 18.10.09 21:34
Оценка:
Простой вопрос. Есть ли forward declarations в Си 89-го и 99-х годов как в Плюсах?
Re: Forward declarations in C?
От:
Кодт
Дата: 18.10.09 21:41
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Простой вопрос. Есть ли forward declarations в Си 89-го и 99-х годов как в Плюсах?
Да, есть.
Перекуём баги на фичи!
Re: Forward declarations in C?
От:
rg45
Дата: 19.10.09 05:18
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Простой вопрос. Есть ли forward declarations в Си 89-го и 99-х годов как в Плюсах?
Что касается функций — да, то же самое. А вот с объявлениями структур есть небольшая особенность:
typedef struct Foo Foo;
void foo(Foo*);
Все дело в том, что имя структуры в C не является автоматически именем типа, как в C++.
--
Re[2]: Forward declarations in C?
R>Что касается функций — да, то же самое.
ну, не совсем. например в С и С++ следующее объявление означает совсем разные вещи:
void fun(struct A * p);
Of course, the code must be complete enough to compile and link .
Re[3]: Forward declarations in C?
вот более полный пример:
//C
void fun(struct A * p)
{
}
struct A{int i_;};
int main()
{
struct A a;
fun(&a);//Error!!!
}
//C++
void fun(struct A * p)
{
}
struct A{int i_;};
int main()
{
struct A a;
fun(&a);//Ok!!!
}
Of course, the code must be complete enough to compile and link .
Re[3]: Forward declarations in C?
От:
Кодт
Дата: 19.10.09 15:24
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:
R>>Что касается функций — да, то же самое.
L_L>ну, не совсем. например в С и С++ следующее объявление означает совсем разные вещи:
Не совсем разные вещи, просто С++ здесь нахаляву ещё и предобъявление сделает.
А в Си нужно предобъявление ручками
struct TagA; // предобъявление в чистом виде
typedef struct TagB AliasB, *PointerB; // предобъявление и typedef
struct TagC *g_pc; // предобъявление и объявление переменной
void foo(struct TagA* pa, AliasB* pb1, PointerB pb2, struct TagC* pc);
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Перекуём баги на фичи!
Re[4]: Forward declarations in C?
совсем/не совсем — мне это не понятно. результаты разные, у одного область видимости функции, у другого — вне функции.
на мой взгляд, все же "совсем".
Of course, the code must be complete enough to compile and link .
Re[5]: Forward declarations in C?
От:
Кодт
Дата: 19.10.09 16:42
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:
L_L>совсем/не совсем — мне это не понятно. результаты разные, у одного область видимости функции, у другого — вне функции.
L_L>на мой взгляд, все же "совсем".
Таак, что-то я не въезжаю.
void f(struct A* p)
{
A* q = p;
}
A* r; // хочешь сказать, что здесь A не видно? g++ уверяет меня в обратном
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Перекуём баги на фичи!
Re[6]: Forward declarations in C?
К>К>void f(struct A* p)
К>{
К> A* q = p;
К>}
К>A* r; // хочешь сказать, что здесь A не видно? g++ уверяет меня в обратном
К>
пример в моем втором ответе достаточен и твой уже не нужен.
Of course, the code must be complete enough to compile and link .
Пока на собственное сообщение не было ответов, его можно удалить.
Удалить