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

  • BradleyWuzHere

    BradleyWuzHe

    25 NİSAN 2011
  • newport83

    newport83

    19 HAZİRAN 2006
  • The Weavers of Eternity Paracord Tutorials

    The Weavers

    1 Ocak 2014