2013-11-28 2 views
0
#define HOST_NAME "UDP" 
#define ADDRESS "127.0.0.1" 
struct UDP_IP_Parameters { 
     uint version; /* e.g. "1.0" = 0x0100 */ 
     uint port; /* PORT */ 
     taggedunion { 
      "HOST_NAME" char[256]; 
      "ADDRESS" char[15]; 
     }; 
}; 

int main() 
{ 
struct UDP_IP_Parameters udp; 
udp.version = 0x0100; 
udp.port = 444; 

} 

Я создал структуру и taggedunion, вложенные в нее. Можно ли определить имя и адрес хоста, как указано выше? Можно ли присвоить некоторые значения, создав для него объекты. Может ли кто-нибудь дать мне некоторые идеи.Структура и помеченный союз в c

ответ

2

Это не C.

Нет, вы не можете указать значения в объявлении типа.

Ближайшие вы можете сделать, это, вероятно, что-то вроде:

typedef struct { 
    uint16_t version; /* Guessing size requirements. */ 
    uint16_t port; 
    bool resolved; 
    union { 
    char host_name[256]; 
    char address[24]; 
    } addr; 
} UDP_IP_Parameters; 

выше использует resolved флага «теги» Союз, поэтому программа может знать, какой член союза является действительным.

Вы должны быть в состоянии инициализировать экземпляр так:

UDP_IP_Parameters so = { 0x100, 80, false, { "stackoverflow.com" } }; 

Не уверен, что если (в C99), вы можете использовать пунктирную синтаксис для этого:

UDP_IP_Parameters so = { 0x100, 80, true, { .address = "198.252.206.16" } }; 
+0

Спасибо большое за ответ. – user2984410

+0

можно использовать bool ?? Я получаю сообщение об ошибке: синтаксис erro: идентификатор bool. – user2984410

+0

@ user2984410 'bool' является стандартным типом с C99, но вам нужно' #include '. Если вы используете компилятор, отличный от C99 (например, Visual Studio), он не будет работать. – unwind

Смежные вопросы