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

  • Bennythecoder

    Bennythecode

    25 Mart 2008
  • Canceriansoul

    Canceriansou

    15 Ocak 2011
  • Jason Parker

    Jason Parker

    14 Aralık 2009