UFO ET IT

C에서 불투명 포인터는 무엇입니까?

ufoet 2020. 12. 30. 08:31
반응형

C에서 불투명 포인터는 무엇입니까?


C에서 불투명 포인터 개념의 사용법과 논리를 알 수 있습니까?


불투명 포인터는 기본 데이터의 세부 사항이 드러나지 않는 포인터입니다 (사전 정의에서 : opaque : 형용사; 볼 수 없음; 투명하지 않음 ).

예를 들어, 헤더 파일에서 선언 할 수 있습니다 (이것은 실제 코드의 일부입니다).

typedef struct pmpi_s *pmpi;

pmpi불투명 구조체에 대한 포인터 인 유형을 선언하므로 선언하는 struct pmpi_s모든 pmpi것은 불투명 포인터가됩니다.

해당 선언의 사용자는 다음과 같은 코드를 자유롭게 작성할 수 있습니다.

pmpi xyzzy = NULL;

구조의 실제 "정의"를 모른 채.

그런 다음 정의에 대해 알고있는 코드 (예 : pmpi처리 기능을 제공하는 코드) 에서 구조를 "정의"할 수 있습니다.

struct pmpi_s {
    uint16_t *data;     // a pointer to the actual data array of uint16_t.
    size_t sz;          // the allocated size of data.
    size_t used;        // number of segments of data in use.
    int sign;           // the sign of the number (-1, 0, 1).
};

헤더 파일의 사용자가 할 수없는 작업 인 개별 필드에 쉽게 액세스 할 수 있습니다.

불투명 포인터 에 대한 자세한 내용은 Wikipedia 페이지 에서 찾을 수 있습니다 .

주요 용도는 라이브러리 사용자로부터 구현 세부 정보를 숨기는 것입니다. 캡슐화 (C ++ 군중이 당신에게 말할 것임에도 불구하고)은 오랫동안 사용되었습니다 :-)

사용자가 라이브러리를 효과적으로 사용할 수 있도록 라이브러리에 대한 세부 정보 만 게시 하고 더 이상 게시하지 않으려 고합니다 . 더 많이 게시하면 사용자에게 의존 할 수있는 세부 정보가 제공됩니다 (예 : 크기 변수 sz가 구조의 특정 위치에 있다는 사실로 인해 컨트롤을 우회하고 직접 조작 할 수 있음).

그러면 내부를 변경할 때 고객이 심하게 불평하는 것을 발견 할 수 있습니다. 구조 정보가 없으면 API는 제공하는 항목으로 만 제한되며 내부에 대한 조치의 자유는 유지됩니다.


이름에서 알 수 있듯이 불투명 한 것은 우리가 볼 수없는 것입니다. 예 : 나무는 불투명합니다. 불투명 포인터는 정의 시점에 내용이 노출되지 않은 데이터 구조를 가리키는 포인터입니다. 예:

struct STest * pSTest;

불투명 포인터에 NULL을 지정하는 것이 안전합니다.

pSTest = NULL;

참조 URL : https://stackoverflow.com/questions/7553750/what-is-an-opaque-pointer-in-c

반응형