C / C ++에서 문자 크기 ( ‘a’) : %d\n”, sizeof(char));

C와 C ++에서 문자의 크기는 얼마입니까? 내가 아는 한 char의 크기는 C와 C ++에서 1 바이트입니다.

C에서 :

#include <stdio.h>
int main()
{
    printf("Size of char : %d\n", sizeof(char));
    return 0;
}

C ++에서 :

#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 ++에서 유형은 char1이며 크기는 1입니다. 이는 두 언어 간의 많은 작은 차이점 중 하나입니다.


답변

Paul이 말했듯 이 C에는 있지만 C ++ 에는 있기 때문 'a'입니다 .intchar

몇 년 전에 다음과 같이 작성한 내용에서 C와 C ++의 차이점을 다룹니다. http://david.tribble.com/text/cdiffs.htm


답변

C에서 문자 리터럴의 유형은 C ++에서 intchar 입니다. 이것은 함수 오버로딩지원하는 데 필요한 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에서 정의되지 않은 동작입니다.


답변