2011-09-08 1 views
0
static struct inet_protosw inetsw_array[] = 
{ 
    [0] = { /* assignment by index */ 
     .type =  SOCK_STREAM, /* assignment by field */ 
     .protocol = IPPROTO_TCP, 
     .prot =  &tcp_prot, 
     .ops =  &inet_stream_ops, 
     .no_check = 0, 
     .flags =  INET_PROTOSW_PERMANENT | 
       INET_PROTOSW_ICSK, 
    }, 
} 

위 코드는 C에서 작동하지만 C++에서는 작동하지 않습니다. 2 가지 방법이 정말 멋지다고 생각합니다. C++에서 어떻게 제거합니까?인덱스 또는 필드 별 지정이 C++에서 작동하지 않습니다.

추신 : 유형 : SOCK_STREAM

+0

기타 자세한 내용은 http://stackoverflow.com/questions/4900739/why-are-designated-initializers-not-implemented-in-g – jweyrich

답변

0

[0].type 초기화 지정자가 ISO C99에 의해 도입되었으며 1998 년 C++ 표준이 출시 되었기 때문에 이러한 기능이 통합되지 않았습니다.

또한 C++ 11에서는 사용할 수 없습니다. 표준의 관련 섹션은 8.5.1 집합체이며 해당 섹션의 모든 예제는 부호가 없습니다.

+0

에 추가되었습니다. C++ 11에서는 불가능합니다. – jweyrich

+0

메모를 보내 주셔서 감사합니다. 답변을 업데이트했습니다. –

4

C 및 C++ 다른 언어입니다 필드 할당하여 수행 할 수 있습니다 보인다. 이 코드 샘플은 C에 존재하며 C++에는없는 개체 초기화 기능을 사용합니다.

"C++에서 제거했습니다."C++에서 분기했을 때 C의 일부가 아니 었습니다.

+0

글쎄 ...... –

+0

예. 이 2 가지 기능은 새 버전 gcc – pengguang001

관련 문제