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

  • 3dmmfavs

    3dmmfavs

    29 Kasım 2009
  • Professor Messer

    Professor Me

    27 NİSAN 2007
  • Schmittastic Jr.

    Schmittastic

    19 Mart 2013