size of(my_arr)[0]이 컴파일되고 size of(my_arr[0])이 같은 이유는 무엇입니까?
이 코드가 컴파일되는 이유는 무엇입니까?
_Static uint32_t my_arr[2];
_Static_assert(sizeof(my_arr) == 8, "");
_Static_assert(sizeof(my_arr[0]) == 4, "");
_Static_assert(sizeof(my_arr)[0] == 4, "");
처음 두 개의 단언은 분명히 맞지만, 저는 마지막 줄이 실패할 것이라고 예상했을 것입니다. 제 이해로는 다음과 같습니다.sizeof()는 배열로 취급할 수 없는 정수 리터럴로 평가해야 합니다.즉, 다음 행이 실패했을 때와 같은 방법으로 실패합니다.
_Static_assert(4[0] == 4, "");
흥미롭게도, 다음 항목은 실제로 컴파일되지 않습니다(같은 작업을 수행해야 합니다).
_Static_assert(*sizeof(my_arr) == 4, "");
오류: 유니리 '*'('긴 서명되지 않은 int' 있음) _Static_assert(*sizeof(my_arr) == 4, ")의 잘못된 형식 인수입니다.
만약 문제가 된다면, 저는 gcc 5.3.0을 사용하고 있습니다.
sizeof함수가 아닙니다.단항 연산자처럼!또는~.
sizeof(my_arr)[0]라고 해석하다sizeof (my_arr)[0]이건 그냥sizeof my_arr[0]용장 괄호로 묶습니다.
이건 마치!(my_arr)[0]라고 해석하다!(my_arr[0]).
일반적으로 포스트픽스 연산자는 C의 프레픽스 연산자보다 우선도가 높습니다. sizeof *a[i]++라고 해석하다sizeof (*((a[i])++))(포스트픽스 오퍼레이터)[]그리고.++에 적용되다a처음에 프리픽스 연산자*그리고.sizeof).
(이것은 의 표현 버전입니다.sizeof. 괄호 안의 타입명을 사용하는 타입 버전도 있습니다.sizeof (TYPE)이 경우 패런이 필요하게 되며,sizeof구문을 참조해 주세요).
sizeof에는, 2개의 「기능」이 있습니다.sizeof(type name)그리고.sizeof expression전자는 한 쌍이 필요합니다.()그 논쟁에 대해.하지만 후자 - 논쟁으로 표현된 - 는 - 을 가지고 있지 않습니다.()그 논쟁에 대해.신경쓰지 말아요.()인수에 사용하는 것은 인수의 일부가 아니라 인수의 표현으로 보입니다.sizeof구문 자체입니다.
부터my_arr컴파일러에서는 타입명이 아닌 오브젝트명으로 알려져 있습니다.sizeof(my_arr)[0]컴파일러에 의해 실제로 인식되고 있다.sizeof표현식에 적용됨:sizeof (my_arr)[0],어디에(my_arr)[0]는 인수식입니다.그()어레이 이름을 둘러싼 것은 완전히 불필요한 것입니다.전체 표현은 다음과 같이 해석됩니다.sizeof my_arr[0]이것은 이전과 동등합니다.sizeof(my_arr[0]).
(이것은, BTW가, 이전이sizeof(my_arr[0])또한 불필요한 한 쌍을 포함한다.().)
는 다소 널리 퍼진 오해이다sizeof의 구문에는 어떤 이유로든()그 논쟁에 대해.이러한 오해는 다음과 같은 표현을 해석할 때 사람들의 직관을 오도하는 것이다.sizeof(my_arr)[0].
[]보다 우선도가 높다sizeof.그렇게sizeof(my_arr)[0]와 같다sizeof((my_arr)[0]).
우선 순위 테이블에 대한 링크를 다음에 나타냅니다.
의 버전을 sizeof식을 매개 변수로 사용하는 연산자.활자를 사용하는 것과 달리 괄호는 필요 없습니다.따라서 피연산자는 단순하게(my_arr)[0](일부러)
언급URL : https://stackoverflow.com/questions/46653406/why-does-sizeofmy-arr0-compile-and-equal-sizeofmy-arr0
'source' 카테고리의 다른 글
| JavaScript에서 두 숫자 사이의 난수 생성 (0) | 2022.09.12 |
|---|---|
| Firebase 클래스에 직렬화할 속성이 없습니다. (0) | 2022.09.12 |
| 단일 Amazon RDS 인스턴스에 생성할 수 있는 데이터베이스 수 (0) | 2022.09.12 |
| Node.js 및 Express를 사용하여 POST할 때 요청 본문에 액세스하는 방법 (0) | 2022.09.12 |
| jQuery: 특정 클래스 이름을 가진 div가 있는지 확인합니다. (0) | 2022.09.12 |