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

  • alex maybury

    alex maybury

    20 Aralık 2007
  • Māris Zaharovs

    Māris Zahar

    28 Mayıs 2008
  • Ordetta Price

    Ordetta Pric

    12 EYLÜL 2011