programing

kuid_t 및 이와 유사한 데이터 유형은 왜 구조화됩니까?

luckcodes 2022. 9. 27. 00:26

kuid_t 및 이와 유사한 데이터 유형은 왜 구조화됩니까?

Linux 커널 소스에서kuid_t로 정의됩니다.typedef struct싱글을 포함하고 있다uid_t변수val를 정의해야 하는 이유는 무엇입니까?kuid_t하나의 구조가 아닌 하나의 구조로서typedef uid_t kuid_t단일 변수에 대해서만 구조를 선언하는 것은 약간 오버헤드로 간주되며, 이 변수에 액세스하려면kuid_t.val:

typedef struct {
    uid_t val;
} kuid_t;

다음과 같은 작업을 수행하는 것이 아니라 거의 일반적인 작업입니다.

typedef uid_t kuid_t;

코멘트를 답변으로 변환합니다.

커널 개발자들의 공식 논리에 동의하지는 않지만...

구조 사용(typedef struct { uid_t val; } kuid_t;UID를 캡슐화하면 (hypotical)를 통과하지 않습니다. kgid_t(GID의 경우) 여기서kuid_t그 반대도 마찬가지입니다.정수형 간의 암묵적인 변환을 방지하여 커널 코드의 유형 안전성을 향상시킵니다.

코드가 다음과 같은 간단한 숫자 유형을 사용하는 경우typedef uid_t kuid_t;그리고.typedef gid_t kgid_t;, 의 기본 타입이 될 가능성이 매우 가능성이 있습니다.uid_t그리고.gid_t동일하기 때문에 쉽게 값을 전달할 수 있습니다.uid_t여기서 필수 유형은gid_t또는 그 반대이며 컴파일러는 로직 문제를 검출할 수 없습니다.

typedef는 기존 유형 이름의 별칭이며 새 유형이 아닙니다.또, 심플한 구조도kuid_t이 질문에는 원시 유형만큼 효율적으로 함수에 전달할 수 있지만 추가 유형 검사가 필요합니다.

언급URL : https://stackoverflow.com/questions/73593434/why-are-kuid-t-and-similar-data-types-of-type-struct