이 코드는 왜 컴파일됩니까?
_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, "");
오류 : 단항 '*'의 유효하지 않은 유형 인수 ( 'long unsigned int'가 있음) _Static_assert (* sizeof (my_arr) == 4, "");
중요한 경우 gcc 5.3.0을 사용하고 있습니다.
( sizeof( my_arr ) )[ 0 ]
실패를 의심한다 .