첫 번째 선언은 컴파일러 알 수 someArray
있다 적어도 100 개 요소 오래. 최적화에 사용할 수 있습니다. 예를 들어, 이는 someArray
결코 그렇지 않음을 의미합니다 NULL
.
C 표준에서는 함수 호출이 이러한 요구 사항을 충족하지 않는 경우 (즉, 정의되지 않은 자동 동작) 컴파일러에서 진단 할 필요가 없습니다.
두 번째 선언은 단순히 요소가 someArray
아닌 someArray
요소를 const로 선언 합니다. 즉, 쓸 수 없습니다 someArray=someOtherArray
. 이 매개 변수가있는 것처럼 동일합니다 char * const someArray
.
이 구문은 []
함수 매개 변수 목록에서 배열 선언자 의 가장 안쪽에서만 사용할 수 있습니다 . 다른 상황에서는 의미가 없습니다.
위의 두 경우를 모두 다루는 표준 텍스트는 C11 6.7.6.3/7(C99의 6.7.5.3/7)에 있습니다.
매개 변수를``타입의 배열 ''로 선언하는 경우 ''유형 포인터 유형 ''으로 조정되어야하며, 여기서 유형 규정 자 (있는 경우)는 배열 유형 도출 [
및 ]
배열 유형 내에 지정됩니다 . static 키워드 가 배열 유형 파생 [
및 ]
배열 유형 내에서도 나타나는 경우, 함수를 호출 할 때마다 해당 실제 인수의 값은 적어도 지정된 수의 요소를 가진 배열의 첫 번째 요소에 대한 액세스를 제공해야합니다. 크기 표현.
int foo(struct bar [static 1]);
대신 사용 하는 것이 바람직하다고 생각되는지 궁금합니다int foo(struct bar *);
. (gcc는 컴파일러가 경고를 줄 수 있도록 이러한 함수를 표시하는 대체 비표준 구문을 가지고 있음을 알고 있습니다.)