문제

extern int ether_hostton (__const char *__hostname, struct ether_addr *__addr)
 __THROW;

내가 찾는 위의 함수 정의에서는/usr/include/netinet/에테르.h Linux 상자입니다.

할 수 있는 누군가가 무엇인지 설명 배 밑줄 것을 의미 앞에서 const(keyword),위치(identifier)그리고 마지막에__니다.

도움이 되었습니까?

해결책

C 에서 심볼을 시작으로 밑줄 따라 중 하나로 상하이-케이지 또는 다른 밑줄은 예약에 대해 구현됩니다.사용자로 당신의요한 역할을한다는 것을 알고 있어야 만들지 않는 모든 심볼을 시작으로 예약습니다.에서는 C++,제한 더 엄격;당신이 사용자는 만들 수 없습니다 기호가 포함된 배 밑줄입니다.

정:

extern int ether_hostton (__const char *__hostname, struct ether_addr *__addr)
__THROW;

__const 표기법이 허용하는 가능성에 대한(다소 어렵)는 컴파일러는 이 코드를 사용으로 지원 프로토 타입 표기하지 못하는 올바른 이해의 C89 표준 키워드 const.이 autoconf 매크로는 여전히 여부를 확인 컴파일러는 작업에 대한 지원 const;이 코드를 사용할 수 있 깨진하는 컴파일러가 없는 것을 지원합니다.

의 사용 __hostname__addr 은 측정,당신을 위해 사용자의 헤더가 있습니다.당신이 컴파일하고 GCC -Wshadow 옵션을 컴파일러는 경고를 표시할 때 어떤 지역 변수는 그림자는 글로벌 변수입니다.는 경우 기능 사용 hostname__hostname, 고,함수가 있는 경우 라 hostname(), 기 숨기.이름을 사용하여 예약을 구현,충돌이 없으로 당신의 합법적인 코드.

의 사용 __THROW 을 의미하는 코드는,어떤 상황에서,선언의 일종으로'던져 사양'.이지 않는 표준 C그것은 더 많은 다음과 같습니다.하지만 코드를 사용할 수 있는 C 컴파일러로 중 하나의 헤더(또는 컴파일러 자체)정의 __THROW 을 비우,또는 일부를 컴파일러 특정한 확장자의 표준 C 문입니다.


섹션 7.1.3C 표준(ISO9899:1999)말합니다:

7.1.3 유 식별

각 헤더를 선언하거나 정의하는 모든 식별자에 나열되어 관련된위 절,고 필요에 따라 선언하거나 식별자를 정의합에 나와 연결된 미래의 방향으로 라이브러리 위 절하고 식별자는 항상 예약하거나 사용 또는 사용으로 파일 범위를 식별자가 있습니다.

—모든 식별자는 밑줄로 시작하고 하나는 대문자로 또는 다른 밑줄은 항상을 위해 예약됩니다.

—모든 식별자는 밑줄로 시작은 항상 사용하는 것으로 식별자 파일 범위에서 일반 및 태그 이름을 공간이 있습니다.

—각 매크로에 이름을 다음과 같은 subclauses(을 포함하여 미래의 라이브러리 방향)를 사용하도록 예약되어로 지정되는 경우에는 관련된 헤더가 포함되어 있습니다;달리 명시적인 언급이 없을 경우(보 7.1.4).

—모든 식별자를 가진 외부 링크는 다음과 같은 subclauses(을 포함하여 미래의 도서관 방향)항상 사용하는 것으로 식별자와 외장 링크가 있습니다.154)

—각각의 식별자를 가진 파일을 범위에 나열된 모든 다음 subclauses(을 포함하여 미래의 도서관 방향)를 사용하는 매크로로 이름으로 식별자 파일 범위에서 이름이 동일한 공간이 있는 경우 그 관련된 헤더에 포함되어 있습니다.

No 기타 식별자는 reserved.는 경우 프로그램 또는 선언을 정의에서 식별자 컨텍스트에서는 지(기타 이에 의해 허용되는 7.1.4),또는 정의 예약 식별자로서 매크로에 이름을 동작이 정의 되지 않습니다.

는 경우 프로그램을 제거(과 #undef 에)어떤 매크로의 정의에서 식별자는 첫 번째 그룹,위에 나열된 동작이 정의 되지 않습니다.

각주 154)목록의 예약한 식별자를 가진 외부 링크 포함 errno, math_errhandling, setjmp, 고 va_end.


또한 참조 무엇인가에 대한 규칙을 사용하여 밑줄에서는 C++식별자;많은 동일한 규칙의 적용하는 C 및 C++지만,포함 된 두 번 밑줄 규칙에서는 C++유럽에서 최고의 이 대답이다.

다른 팁

이중 선행 밑줄이있는 이름은 구현에서 사용하기 위해 예약되어 있습니다. 이것이 반드시 그들이 종종 내부 자체라는 것을 의미하지는 않습니다.

아이디어는 다음과 같은 이름을 사용할 수 없다는 것입니다. __, 따라서 구현은 거시적 확장과 같은 장소 또는 구문 연장의 이름으로 자유롭게 사용할 수 있습니다 (예 : __gcnew C ++의 일부는 아니지만 Microsoft는 C ++/CLI에 추가 할 수 있습니다. int __gcnew; 컴파일을 멈출 수 있습니다).

이러한 특정 확장이 의미하는 바를 찾기 위해 __const 특정 컴파일러/플랫폼의 설명서를 참조해야합니다. 이 특별한 경우에는 문서의 프로토 타입을 고려해야합니다 (예 : http://www.kernel.org/doc/man-pages/online/pages/man3/ether_aton.3.html) 함수의 인터페이스가되고 무시합니다. __const 그리고 __THROW 실제 헤더에 나타나는 장식.

일부 라이브러리의 컨벤션에 의해, 이것은 특정 기호가 내부 사용을위한 것이며 라이브러리의 공개 API의 일부가되지 않았 음을 나타냅니다.

__const의 밑줄은이 키워드가 컴파일러 확장이고이를 사용하는 것이 휴대 가능하지 않음을 의미합니다 (Const 키워드는 나중에 개정판 89에서 C에 추가되었습니다). __throw는 또한 일종의 확장자이며, GCC를 사용하는 경우 __attribute __ (무언가)로 정의된다고 가정하지만 확인하기에는 너무 게으르다. __addr은 프로그래머가 원하는 것을 의미 할 수 있습니다. 단지 이름 일뿐입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top