SORU
9 HAZİRAN 2015, Salı


Switch-case kazandı't derleme kullanılmayan bir satır yorum sonra

İşte benim kod:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <netdb.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>

int main (void) {

  struct addrinfo hints; 
  memset (&hints, 0, sizeof hints);

  hints.ai_family = AF_UNSPEC; 
  hints.ai_socktype = SOCK_DGRAM;  
  hints.ai_flags = AI_CANONNAME;   

  struct addrinfo *res;

  getaddrinfo ("example.com", "http", &hints, &res);
  printf ("Host: %s\n", "example.com");

  void *ptr;

  while (res != NULL) {
    printf("AI Family for current addrinfo: %i\n", res->ai_family);
    switch (res->ai_family) {
      case AF_INET:
        ptr = (struct sockaddr_in *) res->ai_addr;
        struct sockaddr_in *sockAddrIn = (struct sockaddr_in *) res->ai_addr;
        break;
    }
    res = res->ai_next;
  }
  return 0;
}

iyi derler.

Ben bu satırı açıklama ancak:

//ptr = (struct sockaddr_in *) res->ai_addr;

.

$ gcc ex4.c
ex4.c:30:9: error: expected expression
        struct sockaddr_in *sockAddrIn = (struct sockaddr_in *) res->ai_addr;
        ^
1 error generated.

Neyi kaçırıyorum?

CEVAP
9 HAZİRAN 2015, Salı


Bir switch ifadesi her durumda, teknik olarak, bir etikettir. Bazıları için obscure and old reasons etiket sonra ilk satırı olarak değişken bir açıklaması için izin verilmez. Atama açıklama

ptr = (struct sockaddr_in *) res->ai_addr;

hattı

struct sockaddr_in *sockAddrIn = (struct sockaddr_in *) res->ai_addr;

etiket sonra ilk satırda dediğim gibi, C. yasadışı olan AF_INET: olur

Çözüm kıvırcık parantez gibi nedenle tüm tabloların sarmak için:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <netdb.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>

int main (void) {

  struct addrinfo hints; 
  memset (&hints, 0, sizeof hints);

  hints.ai_family = AF_UNSPEC; 
  hints.ai_socktype = SOCK_DGRAM;  
  hints.ai_flags = AI_CANONNAME;   

  struct addrinfo *res;

  getaddrinfo ("example.com", "http", &hints, &res);
  printf ("Host: %s\n", "example.com");

  void *ptr;

  while (res != NULL) {
    printf("AI Family for current addrinfo: %i\n", res->ai_family);
    switch (res->ai_family) {
      case AF_INET:
      {
        ptr = (struct sockaddr_in *) res->ai_addr;
        struct sockaddr_in *sockAddrIn = (struct sockaddr_in *) res->ai_addr;
        break;
      }
    }
    res = res->ai_next;
  }
  return 0;
}

Neyse, bu daha iyi uygulama kodlama olduğunu düşünüyorum.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:
C

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • DominicFear

    DominicFear

    30 Kasım 2006
  • GoogleTechTalks

    GoogleTechTa

    15 AĞUSTOS 2007
  • Kevin Bruckert

    Kevin Brucke

    30 Aralık 2006