Mam następujący przykład kodu C:const dla rozmiaru tablicy wyrażeń na argumencie
int f(const int farg[const 5])
{
}
Jakie dodatkowe const dla rozmiaru tablicy zrobić? I jaka jest różnica, kiedy pomijam tam const?
Mam następujący przykład kodu C:const dla rozmiaru tablicy wyrażeń na argumencie
int f(const int farg[const 5])
{
}
Jakie dodatkowe const dla rozmiaru tablicy zrobić? I jaka jest różnica, kiedy pomijam tam const?
int d(const int darg[5])
Środki darg
jest wskaźnikiem do const
int
.
int e(int earg[const 5])
Środki earg
jest const
wskaźnik int
. To jest funkcja c99. T A[qualifier-list e]
jest równoważny jako T * qualifier-list A
w deklaracji parametrów.
I oczywiście (od góry):
int f(const int farg[const 5])
Środki farg
jest const
wskaźnik const
int
.
Co robi dodatkowa stała dla rozmiaru tablicy?
C11: 6.7.6.3:
deklaracja parametru jako '' tablicy typu '' powinny być dostosowane do '' wykwalifikowanego wskaźnik do typu '', gdzie kwalifikatory typu (jeśli występują) są określone w
[
i]
pochodnej typu tablicowego.
Oznacza to
int f(const int farg[const 5])
zostaną dostosowane do
int f(const int *const farg)
A jaka jest różnica kiedy pominąć const tam?
Po pominięcia jest to równoważne
int f(const int frag[5]) //or int f(const int frag[])
co ostatecznie jest równoważne
int f(const int *farg)
[prawdopodobnie związane] (http://stackoverflow.com/q/17559631/596781) –
drugi "const" dał mi 4 błędy kompilatora – mch
@mch upewnij się, że twój kompilator obsługuje C99 lub C11. (-std = c11 na przykład). clang 3.4 z -std = c11 zjada to bez problemu. – WhozCraig