2013-09-21 24 views
5

Thông thường khi chúng ta khởi tạo một mảng, chúng ta sẽ có thể làm:Có ok để có các phần tử thừa trong bộ khởi tạo mảng không?

int arr[] = {1, 2, 3, 4, 5}; 

Nhưng là nó ok để hạn chế một cách rõ ràng theo chiều dài của mảng như dưới đây? :

int arr[3] = {1, 2, 3, 4, 5}; 

Mặc dù có một số cảnh báo từ trình biên dịch, tệp thực thi dường như không có bất kỳ sự cố nào.

+3

Nhưng tại sao thậm chí làm điều đó – aaronman

+1

Bạn nên chú ý đến cảnh báo. Nhưng trình biên dịch là đủ duyên dáng để bỏ qua ramblings của bạn trên các yếu tố phụ. Tuy nhiên tôi cảm thấy đây là lập trình cẩu thả. –

+0

Động lực để làm là gì? Tôi không thấy sử dụng thực tế cho nó, tại sao nó lại quan trọng? –

Trả lời

8

Không, không được. Từ C99, 6.7.8.2:

chế

  1. Không initializer sẽ cố gắng để cung cấp một giá trị cho một đối tượng không nằm trong các thực thể được khởi tạo.

Trong đọc của tôi, điều này có nghĩa rằng việc cung cấp các yếu tố khởi tạo dư thừa là một sự vi phạm hạn chế, nên gọi hành vi không xác định.

+0

Để làm rõ bạn có nghĩa là trong ví dụ trên arr [5] và ở trên được xác định hành vi nhưng arr [4] và dưới đây là không xác định? – Pacerier

+1

@Pacerier Nếu tôi hiểu đúng tiêu chuẩn, thì có, chính xác. –

Các vấn đề liên quan