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
'programing' 카테고리의 다른 글
Jsx를 사용하는 경우 Vuejs 2.x에서 fragment를 사용하는 방법 (0) | 2022.06.29 |
---|---|
상위 구성 요소의 한 Vue 구성 요소에서 저장된 vanilla 클래스 인스턴스에 액세스하는 방법 (0) | 2022.06.29 |
Vuetify 아이콘이 올바르게 표시되지 않음: "$vuetify.icons"로 표시됩니다.." (0) | 2022.06.28 |
다른 소품 검증기에서 소품 값에 액세스 (0) | 2022.06.28 |
휘발성이 멀티스레드 C 또는 C++ 프로그래밍에서 유용하다고 생각되지 않는 이유는 무엇입니까? (0) | 2022.06.28 |