Помогите разобраться с #if - макросами

Тема в разделе "LANGS.C", создана пользователем Magnum, 1 дек 2011.

  1. Magnum

    Magnum New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2007
    Сообщения:
    925
    Привет!

    Есть структура

    Код (Text):
    1. typedef struct _SYSTEM_STRUCTURE
    2. {
    3. int a,b,c;
    4. bool x,y,z;
    5. }
    Эта структура объявлена в моем классе.
    Нужно макросами осуществить проверку: если структура объявлена ранее (где-то в системных хидерах), то не объявлять, а если не объявлена, то объявлять.

    Как такое задать компилятору?
    Курю #ifndef, но что-то пока не получается.
     
  2. Sholar

    Sholar New Member

    Публикаций:
    0
    Регистрация:
    16 окт 2011
    Сообщения:
    189
    Вам нужно точно узнать в каком хидере эта структура объявляется и проверять был ли этот хидер подключен. Думаю с этим проблем не должно возникнуть.
     
  3. Magnum

    Magnum New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2007
    Сообщения:
    925
    Да в том, то и дело, что знать не могу :dntknw:
    Человек может у себя объявить структуру, может подключить системный хидер, а может мой хидер подключить. Надо как-то красивее.
     
  4. Sholar

    Sholar New Member

    Публикаций:
    0
    Регистрация:
    16 окт 2011
    Сообщения:
    189
    Хмм, тогда придется где-нибудь в редми писать для этого человека, что твой хидер нужно подключать только после подключения системных. Решение мягко говоря некрасивое, но проблему решит.
     
  5. sergegers

    sergegers New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2008
    Сообщения:
    172
    системные хидеры обычно в гардах, типа

    Код (Text):
    1. #ifndef _WIN_NT_
    2. #define _WIN_NT_
    3.  
    4. #endif // _WIN_NT_
    тогда надо сделать так

    Код (Text):
    1. #ifndef _WIN_NT_
    2.  
    3. typedef struct _SYSTEM_STRUCTURE
    4. {
    5. int a,b,c;
    6. bool x,y,z;
    7. }
    8.  
    9. #endif // _WIN_NT_