반응형
왜 (그리고 언제) sizeof 뒤에 괄호를 사용해야합니까?
아래는 컴파일에 실패합니다.
typedef int arr[10];
int main(void) {
return sizeof arr;
}
sizeof.c:3: error: expected expression before ‘arr’
하지만 내가 그것을 변경하면
sizeof(arr);
모든 것이 좋습니다. 왜?
6.5.3에 따르면 sizeof
다음과 같은 두 가지 형식이 있습니다 .
sizeof unary-expression
sizeof ( type-name )
때문에 arr
코드가 인에 type-name
, 그것은 괄호해야합니다.
이것이 언어가 지정되는 방식입니다. 여기서 유형 이름은 괄호로 묶어야합니다.
문법이 다음과 같다고 가정합니다.
sizeof unary-expression
sizeof type-name
이제 예를 들어 다음 표현식은 모호합니다.
sizeof int * + 0
sizeof(int *) + 0
또는 일 수 있습니다 sizeof(int) * +0
. 식에 추가 된 별표는식이 아니기 때문에 단항 식에서는 이러한 모호성이 발생하지 않습니다 (하지만 일부 형식 이름의 경우 하나를 추가하면 다시 형식 이름이 됨).
여기에 무언가를 지정해야했고 유형 이름을 괄호로 묶도록 요구하는 것이 모호성을 해결하는 방법입니다.
당신이 가지고 있기 때문이라고 생각합니다 typedef
. 제거하면 컴파일됩니다.
위키 백과의 예 :
/* the following code fragment illustrates the use of sizeof
* with variables and expressions (no parentheses needed),
* and with type names (parentheses needed)
*/
char c;
printf("%zu,%zu\n", sizeof c, sizeof (int));
참고 URL : https://stackoverflow.com/questions/5894892/why-and-when-do-i-need-to-use-parentheses-after-sizeof
반응형
'developer tip' 카테고리의 다른 글
ASP.NET MVC 5에서 사용자 지정 인증을 구현하는 방법 (0) | 2020.10.21 |
---|---|
Java 할당 연산자 실행 (0) | 2020.10.21 |
models.py를 여러 파일로 분할 (0) | 2020.10.21 |
RelativeLayout의 기준선은 무엇입니까? (0) | 2020.10.21 |
왜 1x1 픽셀 GIF (웹 버그) 데이터를 제공합니까? (0) | 2020.10.21 |