C와 C ++에서 문자의 크기는 얼마입니까? 내가 아는 한 char의 크기는 C와 C ++에서 1 바이트입니다.
#include <stdio.h>
int main()
{
printf("Size of char : %d\n", sizeof(char));
return 0;
}
#include <iostream>
int main()
{
std::cout << "Size of char : " << sizeof(char) << "\n";
return 0;
}
놀랍지 않게, 둘 다 출력을 제공합니다. Size of char : 1
이제 우리는 같은 문자가 표시되는 것을 알고 'a'
, 'b'
, 'c'
, '|'
난 그냥 다음에 위의 코드를 수정 … 그래서 :
C에서 :
#include <stdio.h>
int main()
{
char a = 'a';
printf("Size of char : %d\n", sizeof(a));
printf("Size of char : %d\n", sizeof('a'));
return 0;
}
Size of char : 1
Size of char : 4
C ++에서 :
#include <iostream>
int main()
{
char a = 'a';
std::cout << "Size of char : " << sizeof(a) << "\n";
std::cout << "Size of char : " << sizeof('a') << "\n";
return 0;
}
Size of char : 1
Size of char : 1
왜 sizeof('a')
C와 C ++에서 다른 값을 반환합니까?
답변
C에서 문자의 형 상수 등이 'a'
실제로하다 int
(4)의 크기 (또는 다른 구현에 의존 값)와 함께,. C ++에서 유형은 char
1이며 크기는 1입니다. 이는 두 언어 간의 많은 작은 차이점 중 하나입니다.
답변
Paul이 말했듯 이 C에는 있지만 C ++ 에는 있기 때문 'a'
입니다 .int
char
몇 년 전에 다음과 같이 작성한 내용에서 C와 C ++의 차이점을 다룹니다. http://david.tribble.com/text/cdiffs.htm
답변
C에서 문자 리터럴의 유형은 C ++에서 int 및 char 입니다. 이것은 함수 오버로딩 을 지원하는 데 필요한 C ++ 입니다. 이 예를보십시오 :
void foo(char c)
{
puts("char");
}
void foo(int i)
{
puts("int");
}
int main()
{
foo('i');
return 0;
}
산출:
char
답변
C 언어 에서 문자 리터럴은 char
유형 이 아닙니다 . C는 문자 리터럴을 정수로 간주합니다. 따라서 sizeof('a')
와 사이에는 차이가 없습니다 sizeof(1)
.
따라서 문자 리터럴의 크기는 C의 정수와 같습니다.
C ++ 언어 에서 문자 리터럴은 유형입니다 char
. cppreference의 말의 :
1) 좁은 문자 리터럴 또는 일반 문자 리터럴 (예 :
'a'
또는
'\n'
또는)'\13'
. 이러한 리터럴은 유형char
과 실행 문자 세트의 c-char 표현과 동일한 값을 갖습니다. c-char가 실행 문자 세트에서 단일 바이트로 표현할 수없는 경우 리터럴에는 int 유형과 구현 정의 값이 있습니다.
따라서 C ++에서 문자 리터럴은의 유형입니다 char
. 따라서 C ++에서 문자 리터럴의 크기는 1 바이트입니다.
Alos, 프로그램에서 sizeof
연산자에 잘못된 형식 지정자를 사용했습니다 .
C11 §7.21.6.1 (P9) :
변환 스펙이 유효하지 않은 경우 동작이 정의되지 않습니다.
따라서 %zu
대신 형식 지정자를 사용해야 합니다 %d
. 그렇지 않으면 C에서 정의되지 않은 동작입니다.