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
'programing' 카테고리의 다른 글
확장자가 .a인 파일은 무엇입니까? (0) | 2022.10.08 |
---|---|
PHP 지정된 디렉터리의 모든 하위 디렉터리 가져오기 (0) | 2022.10.08 |
이 이상한 글자들을 어떻게 변환하죠?( (, ,, ,, (, (, )) (0) | 2022.09.27 |
json_forwards() 이스케이프 슬래시 (0) | 2022.09.27 |
2개의 열을 기준으로 한 순위 (0) | 2022.09.27 |