Ich habe das folgende C Codebeispiel:const für Array-Größe Ausdrücke auf Argument
int f(const int farg[const 5])
{
}
Was bedeutet die zusätzliche const für die Array-Größe tun? Und was ist der Unterschied, wenn ich die Const dort weglasse?
Ich habe das folgende C Codebeispiel:const für Array-Größe Ausdrücke auf Argument
int f(const int farg[const 5])
{
}
Was bedeutet die zusätzliche const für die Array-Größe tun? Und was ist der Unterschied, wenn ich die Const dort weglasse?
int d(const int darg[5])
Means darg
ist ein Zeiger auf const
int
.
int e(int earg[const 5])
Means earg
ist ein Zeiger auf const
int
. Dies ist eine c99-Funktion. T A[qualifier-list e]
entspricht in der Parameterdeklaration T * qualifier-list A
.
Und natürlich (von oben):
int f(const int farg[const 5])
Mittel farg
ist ein const
Zeiger auf const
int
.
Was bewirkt die zusätzliche const für die Array-Größe?
C11: 6.7.6.3:
Eine Erklärung eines Parameters als '' Array von Typ '' bis eingestellt werden soll '' qualifizierte Zeiger auf Typ '', wobei die Typ-Qualifikationsmerkmale (falls vorhanden) diejenigen sind, die innerhalb der
[
und der Array-Typ-Ableitung angegeben sind.
Das bedeutet
int f(const int farg[const 5])
wird
int f(const int *const farg)
eingestellt werden und was ist der Unterschied, wenn ich die const dort weglassen?
Nach Weglassen ist es gleichwertig
int f(const int frag[5]) //or int f(const int frag[])
die zu
schließlich entsprichtint f(const int *farg)
[Möglicherweise verwandten] (http://stackoverflow.com/q/17559631/596781) –
die zweite 'const' gab mir 4 Compilerfehler – mch
@mch stellen Sie sicher, dass Ihr Compiler C99 oder C11 unterstützt. (-std = c11 zum Beispiel). clang 3.4 mit -std = c11 isst das ohne Problem auf. – WhozCraig