고흐의 연구실/C언어와 C++

[C언어] 복합 리터럴, 배열 매개변수 요소의 최소 개수 지정

전고흐 2020. 9. 12. 03:40
728x90

ㅇ복합 리터럴이란???

복합 리터럴은 C99에 추가된 기능이다.

함수에 배열을 넘겨줄 때 복합 리터럴을 사용하면, 배열을 따로 선언하지 않아도 됨.

  • (자료형[]){값1, 값2, 값3}

  • (자료형[크기]){값1, 값2, 값3}

- 예제

#include <stdio.h>

void printArray(int arr[], int count)
{
    for (int i = 0; i < count; i++)
    {
        printf("%d ", arr[i]);
    }

    printf("\n");
}

int main()
{
    // 복합 리터럴 방식으로 배열을 넘겨줌
    printArray((int[]) { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }, 10);

    return 0;
}

예제를 보면, 매개변수에 배열을 넣어주는데, 이것을 복합 리터럴 이라고 함.

 

ㅇ 배열 매개변수 요소의 최소 개수 지정

함수의 배열 매개변수에 static과 숫자를 사용하면 요소의 최소 개수를 지정할 수 있음.

이렇게 하면 매개변수로 들어온 배열의 요소 개수가 지정된 개수보다 작으면 경고 발생.

(GCC, Clang에서만 지원)

반환값자료형 함수이름(자료형 매개변수[static 최소개수])
{
}

- 예제

#include <stdio.h>

void printArray(int arr[static 5], int count)    // 배열 요소의 최소 개수를 5개로 지정
{
    for (int i = 0; i < count; i++)
    {
        printf("%d ", arr[i]);
    }

    printf("\n");
}

int main()
{
    int numArr1[5] = { 1, 2, 3, 4, 5 };

    // 요소 개수가 5개이므로 OK
    printArray(numArr1, sizeof(numArr1) / sizeof(int));

    int numArr2[3] = { 1, 2, 3 };

    // 요소 개수가 3개이므로 경고
    printArray(numArr2, sizeof(numArr1) / sizeof(int));

    return 0;
}

?? GCC환경에서 테스트 해봤는데 일단 안됨,

 

 

출처 : 코딩도장(dojang.io/mod/page/view.php?id=570)

728x90