programing

"char s[static 10]"와 같은 함수의 배열 매개변수에서 정적 키워드의 목적은?

prostudy 2022. 5. 12. 21:54
반응형

"char s[static 10]"와 같은 함수의 배열 매개변수에서 정적 키워드의 목적은?

몇 가지 소스 코드를 검색하다가 다음과 같은 기능을 발견하게 되었다.

void someFunction(char someArray[static 100])
{
    // do something cool here
}

일부 실험에서는 다음과 같은 다른 한정자가 나타날 수 있다.

void someFunction(char someArray[const])
{
    // do something cool here
}

예선은 단지 내부에서만 허용되고 있는 것으로 보인다.[ ]배열을 함수의 매개 변수로 선언할 때이게 뭘 하는 거지?함수 매개 변수에 대해 왜 다른가?

첫 번째 선언은 컴파일러에게 다음과 같이 말한다.someArray최소 100개의 원소 길이.이것은 최적화에 사용될 수 있다.예를 들어, 그것은 또한 다음과 같은 것을 의미한다.someArray결코 아니다NULL.

C 표준은 컴파일러가 함수에 대한 호출이 이러한 요구 사항을 충족하지 않는 경우(즉, 정의되지 않은 침묵의 동작)를 진단할 것을 요구하지 않는다는 점에 유의하십시오.

두 번째 선언은 단순히 선언한다.someArray(아니오)someArray의 요소!) 즉, 글을 쓸 수 없다.someArray=someOtherArray. 매개 변수가 있었던 것과 같다.char * const someArray.

이 구문은 가장 안쪽에서만 사용할 수 있다.[]함수 매개 변수 목록에 있는 배열 선언기의 경우, 다른 컨텍스트에서는 사용할 수 없다.

위의 두 경우를 모두 다루는 표준 텍스트는 C11 6.7.6.3/7(C99의 경우 6.7.5.3/7이었다)

"형식의 배열"로 하는 매개변수 선언은 형식 한정자(있는 경우)가 "형식에 대한 적격 포인터"로 조정되어야 한다.[그리고]배열 형식 파생의키워드 static이 다음 내에 나타나는 경우[그리고]배열 형식 파생의 다음, 함수에 대한 각 호출에 대해, 해당 실제 인수의 값은 크기 표현식에 의해 지정된 최소한 많은 요소를 가진 배열의 첫 번째 요소에 대한 접근을 제공해야 한다.

참조URL: https://stackoverflow.com/questions/3430315/what-is-the-purpose-of-static-keyword-in-array-parameter-of-function-like-char

반응형