배열의 요소 수를 계산할 때 sizeof (TYPE)보다 sizeof (element)를 선호하는 이유는 무엇입니까?


15

"King KN의 C 프로그래밍"을 읽고 다음 문장을 찾았습니다.

sizeof(a)/sizeof(a[0])배열에서 요소의 수를 계산하기 위해 표현식 사용에 대해 논의했습니다 . sizeof(a)/sizeof(t)여기서 t가 a의 요소 유형 인 표현식 도 작동하지만 열등한 기술로 간주됩니다.

왜 열등한 기술로 간주됩니까?


8
프로그래머가 a에서 요소 유형을 변경하면 어떻게 될지 고려 했습니까? t와 크기가 다른 유형으로. 첫 번째 표현은 여전히 ​​괜찮으며 두 번째 표현은 깨질 것입니다.
gnat

1
@ gnat : 당신은 그 대답을해야합니다.
Martin York

답변:


26

sizeof(a)/sizeof(t)명시 적으로 형식을 식에 코딩합니다. 이제 동일한 유형을 사용하도록 컴파일러를 지원하지 않고 여러 위치에 유형이 지정되었습니다. 따라서 배열의 기본 유형을 변경하지만 (완전히 분리 된) 카운트 표현식이 아닌 경우 빙고 : 코드는 정상적으로 컴파일되지만 요소 수는 잘못됩니다. 운이 좋으면 프로그램이 충돌하지만 그렇지 않으면 거의 완벽하게 작동하지만 가끔씩 완전히 기괴하게 작동합니다.

sizeof(a)/sizeof(a[0])배열의 이름 만 있으면됩니다. 타입을 바꾸면 괜찮습니다. 배열 이름을 변경하면 컴파일러가 불평합니다. 우리는 그런 종류의 프로그래밍을 좋아합니다.


글쎄, 나는 실제로 sizeof a/sizeof*a큰 차이는 아니지만을 선호합니다 .
중복 제거기
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.