왜 memset은 char가 아닌 int를 사용합니까?
왜?memset을 받아들이다int대신 두 번째 의론으로서char,반면에.wmemset를 취득하다wchar_t같은 것이 아니라long또는long long?
memsetC에 기능 프로토타입을 추가하기 전(상당히 이전)입니다.시제품이 없으면 통과할 수 없습니다.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 |