2014-07-08 6 views
13

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?

+3

[Möglicherweise verwandten] (http://stackoverflow.com/q/17559631/596781) –

+0

die zweite 'const' gab mir 4 Compilerfehler – mch

+2

@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

Antwort

13
int d(const int darg[5]) 

Means darg ist ein Zeiger auf constint.

int e(int earg[const 5]) 

Means earg ist ein Zeiger auf constint. 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 constint.

1

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 entspricht
int f(const int *farg) 
+3

'const int farg [const 5]' wird an 'const int * const farg' angepasst, nicht an 'const int const * farg'. – ouah

+0

@ouah; Oopa !. Das war ein Tippfehler. Es sollte ein '' qualifizierter Zeiger zum Typ '' sein – haccks

Verwandte Themen