Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어에서 void 타입으로 배열을 생성할 수 없는 이유

void 타입 배열이 허용되지 않는 이유

C 언어에서는 int, char, float, double 등 대부분의 데이터 타입을 사용해 배열을 만들 수 있습니다. 하지만 void 데이터 타입으로는 배열을 생성할 수 없으며, 시도할 경우 컴파일 오류가 발생합니다.

그 이유는 void가 크기가 정해지지 않은 불완전한(incomplete) 타입이기 때문입니다. 배열을 선언하려면 각 요소에 할당될 메모리 크기를 컴파일러가 알아야 하는데, void 타입은 요소 하나의 크기를 결정할 수 없어 배열 선언 자체가 불가능합니다.

예제 코드

다음 프로그램은 void 타입 배열을 선언하려고 시도하는 예제입니다.

#include <stdio.h>
#include <stdlib.h>
int main() {
    void arr1[4];
    printf("A void array");
    return 0;
}

실행 결과

위 프로그램을 컴파일하면 다음과 같은 오류 메시지가 출력됩니다.

error: declaration of 'arr1' as array of voids
void arr1[4];

코드 설명

위 프로그램에서는 void 데이터 타입의 배열 arr1을 선언하고 있습니다. 그러나 C 언어에서는 void 타입의 배열 선언이 허용되지 않기 때문에 "declaration of 'arr1' as array of voids"라는 오류 메시지가 나타나며 컴파일에 실패합니다.

참고: void 포인터는 사용 가능

배열은 만들 수 없지만, void * 형태의 void 포인터는 자유롭게 사용할 수 있습니다. void 포인터는 어떤 데이터 타입의 주소든 저장할 수 있는 범용 포인터로, 사용 시점에 적절한 타입으로 캐스팅하면 됩니다. 즉, C 언어에서 void는 '값의 크기'로 쓰일 수는 없지만 '주소를 가리키는 용도'로는 유용하게 활용됩니다.