2013-07-17 6 views
6
void test(int x[static 10]); 

int main() 
{ 
    int a[]={1,2,3,4,5,6,7,8,9,10,11}; 
    test(a); 
    return 0; 
} 

void test(int x[static 10]) 
{ 
    printf("%d",x[9]); 
} 

Ich suchte nach bizarren C-Aussagen. Ich fand dieses, aber konnte nicht verstehen, was die Verwendung von static 10 in dieser Aussage ist. Ist es dasselbe wie int x[10]?bizarre C-Anweisung

Eine andere Sache, können Sie volatile auch verwenden, anstelle von static z int x[volatile 10]
Jeder weiß, was die Verwendung dieser irgendwie Erklärung ist?

PS: Compiled GCC 4.6.3,

+2

ich diese Frage zuvor gesehen haben. – chris

+2

link bitte, ich suchte vor dem Posten. –

+1

@AkashShende http://stackoverflow.com/questions/3430315/purpose-of-static-keyword-in-array-parameter-of-function –

Antwort

5

Es ist ein Hinweis für den Compiler zu sagen, dass die x Zeigerparameter zeigt auf das erste Element eines Arrays von mindestens 10 Elemente.

Zum Beispiel:

test(NULL); // undefined behavior 
+0

ist dies gültig C++? wie nützlich ist es in der Optimierung (dh wie inline oder besser?) - nur versuchen, mehr Informationen zu bekommen, danke –

+0

ja, aber Programm läuft ohne Fehler, Warnung, auch wenn die bereitgestellten Argumente nicht mindestens 10 –

+0

@ChrisCM siehe mein Beispiel, Übergeben eines 'NULL'-Arguments ist undefiniertes Verhalten. – ouah