먼저, 아래의 코드를 본다.
#include <stdio.h>
int arr[5] = {1, 2, 3, 4, 5};
#define TOTAL_ELEMENTS (sizeof(arr) / sizeof(arr[0]))
int main() {
int d = -1;
if(d <= TOTAL_ELEMENTS - 2)
printf("total elements is bigger\n");
else
printf("total elements is smaller????\n");
return 0;
}
매크로 함수에서 배열 arr의 원소 개수를 리턴한다. 그리고 조건문에서 음수와 비교한다. 원소 개수가 음수보다 작을 수는 전혀 없다.
하지만 결과는 신기하게도 작다.
이유는 이렇다. 매크로함수 TOTAL_ELEMENTS 는 unsigned int 데이터 타입을 반환한다. 그럼 조건문에서는 int 와 unsigned int 데이터 타입이 비교되고, int는 unsigned int로 승격된다.
결국 음수 -1을 갖는 d가 unsigned int 로 승격될 시 매우 큰 숫자로 바뀌게 된다. 그래서 결국 d가 더 크다고 판별하게 되는 것이다.
출처 : 컴파일러 개발자가 들려주는 C 이야기 p.32
'C' 카테고리의 다른 글
Object file.. (0) | 2025.01.14 |
---|---|
세그먼트 (0) | 2023.04.13 |
array length as parameter (0) | 2022.11.09 |
parameter 실수 (1) | 2022.11.08 |
variable arg (1) | 2022.10.03 |