해결된 질문
작성
·
568
0
강의 21:15
교수님께서 배열의 크기를 구해서 이것을 한 칸이 차지하는 크기만큼 나눠야한다고 설명하시는 부분에서
sizeof의 괄호가 있는지 없는지는 앞에서 설명하셨다고 말씀하셨는데,, sizeof를 배운 강의 목차 내용을 다시 살펴봐도 잘 이해가 되질 않습니다.
sizeof( )의 괄호가 있고 없고의 차이와 어떨땐 있고 어떨 땐 없는지 자세히 설명해주시면 감사하겠습니다.
답변 1
0
안녕하세요? 아래 예제에서 맨 아래 두 가지 경우를 비교해보세요.
printf("%zd\n", sizeof a); // 4
printf("%zd\n", sizeof(a)); // 4
printf("%zd\n", sizeof(1+2)); // 4
printf("%zd\n", sizeof 1 + 2); // 6 <- 주의 (바로 아래와 동일)
printf("%zd\n", sizeof(1) + 2); // 6
printf("%zd\n", sizeof int); // <- 자료형(여기서는 int) 에 직접 sizeof를 사용할 때 괄호가 없으면 오류 발생
printf("%zd\n", sizeof(int)); // 4 <- 괄호가 있으면 정상 작동
[참고] When should we use sizeof with and without parentheses [duplicate]
sizeof 1 + 2 와 같은 경우는 컴파일러 입장에서는 ( sizeof 1 ) + 2 로 해석할 수 밖에 없습니다.
반면에 sizeof pow[0] 같은 경우는 컴파일러가 대괄호를 만났을 때 배열 indexing 이겠네라고 해석할 수 있습니다. 그래서 괄호가 없어도 문제가 없었던 것입니다.
위의 링크 맨 아래에 보시면 답글 적어주신 분이 "나는 그냥 언제나 괄호 사용한다"라고 쓰신 글이 있고 저도 거기에 동의합니다.
다만, 괄호 없는 용법을 아예 모르면 다른 사람 코드를 보다가 당황할 수가 있기 때문에 알아두시는 것이 좋습니다.
제가 질문을 한 번에 이해를 못하는 경우가 많은데 구체적으로 다시 정리해주시는 것이 인상적이네요.
교수님 감사합니다.
작성해주신 코드를 직접 테스트 해보았습니다.
이제는 sizeof( ) 연산자에서 괄호를 어느 때 사용하고 사용하지 않는지에 대해 확실히 알게 되었습니다.
sizeof (자료형);
자료형은 무조건 괄호를 사용해야한다.
sizeof (변수/상수 등 표현식)
변수 또는 상수 등 표현식(statements)은 괄호를 쓸 수도 있고, 괄호를 안써도 된다.
※괄호를 사용하지 않을 때는 sizeof와 피연산자 사이 빈칸을 입력해주고, 항상 연산자 우선순위에 따라서 작성한다.
다만 제가 해당 강의에서 헷갈렸던 부분은, 어째서 배열의 경우 괄호가 쳐져있지 않은지..가 궁금했습니다.
혹시 배열도 변수나 상수처럼 표현식이기에,
[괄호를 무조건 함께 사용해야하는 자료형을 제외하면]
변수, 상수, 배열, 포인터 등 모든 것이 표현식이므로 괄호 사용 여부는 자율적으로 결정할 수 있는 것인가요?