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

Tôi đang tìm kiếm các câu lệnh C kỳ quái. Tôi tìm thấy điều này, Nhưng không thể hiểu được việc sử dụng static 10 trong tuyên bố đó là gì. Có giống với int x[10] không?câu lệnh C kỳ lạ

Một điều, bạn có thể sử dụng volatile cũng có, ở vị trí của static ví dụ int x[volatile 10]
Bất kỳ ai biết sử dụng kinda tuyên bố này là gì?

PS: Biên soạn sử dụng GCC 4.6.3,

+2

Tôi đã nhìn thấy câu hỏi này trước đó. – chris

+2

liên kết xin vui lòng, tôi đã tìm kiếm trước khi đăng. –

+1

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

Trả lời

5

Đó là một gợi ý cho các trình biên dịch nói rằng x điểm tham số con trỏ đến phần tử đầu tiên của một mảng tối thiểu 10 yếu tố.

Ví dụ:

test(NULL); // undefined behavior 
+0

là C++ hợp lệ này? làm thế nào là nó hữu ích trong việc tối ưu hóa (tức là như nội tuyến hay tốt hơn?) - chỉ cần cố gắng để có thêm thông tin, nhờ –

+0

vâng, nhưng chương trình chạy mà không có lỗi, cảnh báo ngay cả khi các đối số được cung cấp KHÔNG ít nhất là 10 –

+0

@ChrisCM xem ví dụ của tôi, đi qua một đối số 'NULL' là hành vi không xác định. – ouah