programing

int의 사이즈는 올바른데 int의 사이즈는 잘못된 이유는 무엇입니까?

prostudy 2022. 6. 29. 20:22
반응형

int의 사이즈는 올바른데 int의 사이즈는 잘못된 이유는 무엇입니까?

우리는 그것을 알고 있습니다.sizeof는 데이터형 및 식 크기를 계산하기 위해 사용하는 연산자로, 오퍼랜드가 식일 경우 괄호를 생략할 수 있습니다.

int main()
{
        int a;

        sizeof int;
        sizeof( int );
        sizeof a;
        sizeof( a );

        return 0;
}

최초의 사용법sizeof다른 사람들은 옳은 반면, 틀렸다.

gcc를 사용하여 컴파일하면 다음 오류 메시지가 나타납니다.

main.c:5:9: error: expected expression before ‘int’

C기준에서는 왜 이런 조작을 할 수 없는지 궁금해요.할 것이다sizeof int모호한 점이 있나요?

다음은 애매할 수 있습니다.

sizeof int * + 1

그런가요?(sizeof (int*)) + 1, 또는(sizeof(int)) * (+1)?

분명 C언어는 애매모호함을 해소하기 위한 규칙을 도입할 수 있었을 텐데, 왜 굳이 신경 쓰지 않았는지 짐작이 간다.언어를 그대로 사용하면 유형 지정자는 식에서 "naked"로 나타나지 않으므로 규칙이 두 번째인지 여부를 해결할 필요가 없습니다.*유형의 일부이거나 산술 연산자입니다.

기존의 문법은 이미 의 잠재적인 모호성을 해결한다.sizeof (int *) + 1.그렇다.(sizeof(int*))+1, 아니다 sizeof((int*)(+1)).

C++에는 함수 스타일의 캐스트 구문에서 해결할 수 있는 유사한 문제가 있습니다.쓸 수 있다int(0)그리고 너는 쓸 수 있다.typedef int *intptr; intptr(0);단, 쓸 수 없습니다.int*(0)이 경우 해결 방법은 "naked" 타입은 단순한 타입 이름이어야 하며 공백이 있는 오래된 타입 ID 또는 말미에 구두점이 있을 수 없습니다.아마도요.sizeof같은 제한으로 정의될 수 있었을지도 모르겠네요

C99 Standard부터

6.5.3.4.2
sizeof연산자는 피연산자의 크기(바이트 단위)를 나타냅니다.이것은 표현식 또는 괄호 안의 형식의 이름입니다.

고객님의 경우int는 표현식도 괄호로 묶은 이름도 아닙니다.

C에서 연산자 크기를 사용하는 방법은 두 가지가 있습니다.구문은 다음과 같습니다.

C11 6.5.3 Unary operators
...
sizeof unary-expression
sizeof ( type-name )

유형을 오퍼랜드로 사용할 때는 항상 언어의 구문 정의에 따라 괄호를 사용해야 합니다.식에 size of를 사용하는 경우 괄호는 필요하지 않습니다.

C 표준은 식에서 사용할 수 있는 예를 하나 제시합니다.

sizeof array / sizeof array[0]

단, 일관성을 유지하고 오퍼레이터 우선과 관련된 버그를 피하기 위해 어떤 상황에서도 ()를 사용하는 것이 좋습니다.

언급URL : https://stackoverflow.com/questions/13120473/why-sizeof-int-is-wrong-while-sizeofint-is-right

반응형