프로그래밍언어/C언어[Error]

[C언어][Error] 081. aggregate value used where an integer was expected – 구조체를 정수처럼 사용

about_IT 2025. 5. 2. 20:45

이 오류는 구조체(struct)나 배열과 같은 복합 자료형(aggregate type)을 정수형 값처럼 잘못 사용하려고 할 때 발생합니다. C언어에서는 구조체 자체는 하나의 메모리 블록으로 취급되며, 연산자나 조건식에서 정수로 사용할 수 없습니다. 이를 정수처럼 처리하려 하면 컴파일러는 타입 불일치로 오류를 발생시킵니다.


특히 구조체를 정수값이 필요한 조건문, 수식, 비교 연산자 등에서 사용했을 때 이 오류가 발생합니다.



● 오류 예제

#include <stdio.h>

struct Point {
    int x;
    int y;
};

int main() {
    struct Point p = {1, 2};
    if (p) {  // 오류: 구조체를 조건식에 사용
        printf("조건 참\n");
    }
    return 0;
}

컴파일 시 다음과 같은 오류 메시지를 출력합니다.

error: aggregate value used where an integer was expected


● 해결 방법

구조체를 조건이나 수식에서 사용하려면 구조체의 특정 멤버를 기준으로 조건을 작성해야 합니다. 예를 들어 아래처럼 멤버 값으로 조건을 확인할 수 있습니다.

#include <stdio.h>

struct Point {
    int x;
    int y;
};

int main() {
    struct Point p = {1, 2};
    if (p.x != 0 || p.y != 0) {
        printf("조건 참\n");
    }
    return 0;
}

출력 결과:

조건 참


● 실전 팁

  • 구조체는 정수처럼 비교하거나 연산할 수 없습니다.
  • 조건문에서는 구조체의 특정 멤버를 기준으로 조건을 구성해야 합니다.
  • 포인터 비교가 아닌 구조체 자체의 비교는 명시적인 연산자가 필요합니다.

C언어에서는 구조체는 하나의 데이터 묶음일 뿐 수치적 의미를 가지지 않기 때문에, 조건문이나 수식에 직접 사용할 수 없습니다. 구조체의 멤버를 이용해 논리를 구성하는 것이 바람직한 방법입니다.