source

C99에서 이상한 배열 크기[*]와 [정적]는 얼마입니까?

factcode 2023. 10. 6. 22:02
반응형

C99에서 이상한 배열 크기[*]와 [정적]는 얼마입니까?

C99 및 C11에서는 다음과 같은 기능 프로토타입이 유효합니다.

void foo(int a[const *]);

void bar(int a[static volatile 10]);

그 이상한 구독의 목적은 무엇입니까?*,static, 그리고 CV 예선?

정적으로 입력된 배열과 가변 길이 배열을 구분하는 데 도움이 됩니까?아니면 그냥 통사당일까요?

매개 변수 배열 선언기에서 static

 void f(int a[static 10]);

static여기에 매개 변수가 다음과 같이 표시됩니다.a에 대한 포인터입니다.int그러나 어레이 오브제(여기서a는 그것의 첫번째 요소에 대한 포인터)를 적어도 가지고 있습니다.10요소들.

컴파일러는 다음과 같이 추정할 권리가 있습니다.f논쟁은 그렇지 않습니다.NULL따라서 최적화 작업을 수행할 수 있습니다.gcc현재 최적화를 수행하지 않습니다(소스):

"파라미터 배열 선언자에서 static이 제공하는 정보는 최적화에 사용되지 않습니다.앞으로 프리페칭 작업과 함께 사용하는 것이 타당할 수도 있습니다."

매개 변수 배열 선언자에서 한정자

void g(int a[cvr 10]);

안에서.g a에 대한 cvr 포인터입니다.int(cvr은const,volatile아니면restrict한정자).예를 들어 다음과 같이const라는 뜻입니다.aconst포인터로 가리키다int(즉, 활자int * const).

따라서 매개 변수 선언:

T param[cvr e] 

는 매개 변수 선언과 같습니다.

T * cvr param

* 매개 변수 배열 선언기에서

void h(int a[*]);

[*]함수 선언의 형식 배열 매개 변수 선언(함수 정의의 일부가 아님)은 형식 배열이 가변 길이 배열임을 나타냅니다.

언급URL : https://stackoverflow.com/questions/17559631/what-are-those-strange-array-sizes-and-static-in-c99

반응형