2013-07-17 2 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]); 
} 

Я искал причудливые высказывания С. Я нашел этот, но не мог понять, что такое использование static 10 в этом заявлении. Это то же самое, что и int x[10]?bizarre C statement

Другое дело, вы можете использовать volatile также, вместо staticint x[volatile 10]
например Кто-нибудь знает, что использование этого любопытное декларации?

PS: Составитель использованием GCC 4.6.3,

+2

Я видел этот вопрос раньше. – chris

+2

ссылка пожалуйста, я обыскал перед отправкой. –

+1

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

ответ

5

Это намек на компилятор, сообщая о том, что параметр x указатель указывает на первый элемент массива по меньшей мере 10 элементов.

Например:

test(NULL); // undefined behavior 
+0

- это настоящий C++? насколько полезен он в оптимизации (т. е. как inline или лучше?) - просто пытаюсь получить дополнительную информацию, спасибо –

+0

да, но программа работает без ошибок, предупреждение, даже если предоставленные аргументы НЕ как минимум 10 –

+0

@ChrisCM см. мой пример, передача аргумента 'NULL' - неопределенное поведение. – ouah