ringill's Journal
 
[Most Recent Entries] [Calendar View] [Friends View]

Wednesday, November 30th, 2005

    Time Event
    8:27p
    C, forward declarations
    [все наверное уже это знают]

    Механизм т.н. forward declarations (объявление типа без определения его) в C не очень удобен.
    Предположим, есть структуры A и B, описанные в разных файлах. Задача -- не пользоваться #include одного файла в другой, т.к. это, строго говоря, не требуется.
    --- файл a.h
    struct tag_a
    {
      int i;
    };
    typedef struct tag_a A;
    
    --- файл b.h
    struct tag_a;
    typedef struct tag_a A;
    typedef struct
    {
      A *a;
    } B;

    Так не выйдет: включать a.h и b.h вместе некорректно, т.к. повторный typedef в языке C запрещён. В C++, кстати можно и повторять typedef, и вообще объявлять "struct A;".

    Приходится использовать трюки типа
    #ifndef _A_DEFINED
    #define _A_DEFINED
    typedef struct tag_a A;
    #endif

    << Previous Day 2005/11/30
    [Calendar]
    Next Day >>

About LJ.Rossia.org