왜 memset은 char가 아닌 int를 사용합니까?
왜?memset
을 받아들이다int
대신 두 번째 의론으로서char
,반면에.wmemset
를 취득하다wchar_t
같은 것이 아니라long
또는long long
?
memset
C에 기능 프로토타입을 추가하기 전(상당히 이전)입니다.시제품이 없으면 통과할 수 없습니다.char
어떤 함수로 -- 당신이 시도한다면, 그것은 로 승격될 것입니다.int
통과했을 때, 그리고 함수가 받는 것은int
.
(C++는 아니지만) C에서는 문자 그대로 다음과 같은 문자를 사용할 수 있습니다.'a'
유형이 없습니다.char
-- 타입이 있습니다.int
그래서, 당신이 통과했던 것은 보통 출발할 것입니다.int
어쨌든.기본적으로 그것이 char로 시작되어 승진하기 위한 유일한 방법은 당신이 합격하는 것이다.char
변수.
이론상으로는memset
아마 수정이 가능하기 때문에char
대신int
하지만 어떤 이점도 없을 것 같고, 오래된 코드나 다른 코드를 해독할 가능성도 꽤 있습니다.알 수 없지만 잠재적으로 상당히 높은 비용이 들 수 있고 실질적인 이익을 얻을 가능성이 거의 없기 때문에, 저는 이 제품을 받을 수 있는 가능성이 있다고 생각합니다.char
"time"과 "none" 사이의 선상에 놓입니다.
편집(댓글에 응답):그CHAR_BIT
의 최하위 비트int
타겟에 쓸 값으로 사용됩니다.
아마 이 기능하는 이유와 같은 이유일 것입니다. <ctypes.h>
가지고 가다 ints
가 아니라 chars
.
대부분의 플랫폼에서는char
스택 자체에 푸시하기에는 너무 작기 때문에 보통 머신의 워드 사이즈에 가장 가까운 타입을 푸시합니다.int
.
@Gui13의 코멘트 링크에서 알 수 있듯이 이를 통해 퍼포먼스도 향상됩니다.
프레드의 답변을 보세요. 실적 때문입니다.
제 쪽에서는 다음 코드를 시도했습니다.
#include <stdio.h>
#include <string.h>
int main (int argc, const char * argv[])
{
char c = 0x00;
printf("Before: c = 0x%02x\n", c);
memset( &c, 0xABCDEF54, 1);
printf("After: c = 0x%02x\n", c);
return 0;
}
64비트 Mac에서는 다음과 같은 정보를 얻을 수 있습니다.
Before: c = 0x00
After: c = 0x54
보시다시피 마지막 바이트만 기록됩니다.이것은 아키텍처(엔디안니스)에 따라 다르다고 생각합니다.
언급URL : https://stackoverflow.com/questions/5919735/why-does-memset-take-an-int-instead-of-a-char
'programing' 카테고리의 다른 글
v-html을 VUE 구성 요소로 렌더링 (0) | 2022.07.27 |
---|---|
How to use store in Vue/ Nuxt plugin? (0) | 2022.07.27 |
VueJ의 동적 컴포넌트에 소품을 동적으로 전달s (0) | 2022.07.27 |
C - char 배열에 char가 있는지 확인합니다. (0) | 2022.07.27 |
C의 문자 배열 길이 찾기 (0) | 2022.07.26 |