2012-12-10 37 views

Trả lời

12

Giá trị khác sẽ được khởi tạo; từ tiêu chuẩn C11, §6.7.9 Khởi, ¶19 và ¶21:

Việc khởi sẽ xảy ra trong danh sách initializer trật tự, mỗi initializer cung cấp cho một subobject đặc biệt trọng bất kỳ initializer được liệt kê trước đó cho subobject cùng; 151) tất cả các subobject không được khởi tạo rõ ràng sẽ được khởi tạo hoàn toàn giống như các đối tượng có thời gian lưu trữ tĩnh.

151) Bất kỳ trình khởi tạo nào cho subobject bị ghi đè và do đó không được sử dụng để khởi tạo subobject đó có thể không được đánh giá.


Nếu có ít initializers trong một danh sách cú đúp kín hơn có những yếu tố hoặc thành viên của một tổng hợp, hoặc các ký tự ít trong một chuỗi chữ sử dụng để khởi tạo một mảng có kích thước được biết đến hơn đó là những yếu tố trong mảng, phần còn lại của tổng hợp sẽ được khởi tạo hoàn toàn giống như các đối tượng có thời gian lưu trữ tĩnh.

Và uninitialized int với thời gian lưu trữ tĩnh được implicity khởi tạo không; cùng một phần, ¶10:

Nếu đối tượng có thời lượng lưu trữ tự động không được khởi tạo rõ ràng, giá trị của nó không xác định. Nếu đối tượng có thời lượng lưu trữ tĩnh hoặc luồng không được khởi tạo rõ ràng, thì:

  • nếu có loại con trỏ, nó được khởi tạo thành con trỏ rỗng;
  • nếu có loại con trỏ, nó được khởi tạo thành con trỏ rỗng;
  • nếu nó có loại số học, nó được khởi tạo thành (số dương hoặc không dấu) số;
  • nếu đó là tổng hợp, mọi thành viên được khởi tạo (đệ quy) theo các quy tắc này và mọi phần đệm được khởi tạo thành 0 bit;
  • nếu đó là công đoàn, thành viên được đặt tên đầu tiên được khởi tạo (đệ quy) theo các quy tắc và bất kỳ phần đệm nào được khởi tạo thành 0 bit;

Hành vi này giống nhau trong C89 và C99.

+0

có bất kỳ prouve cho rằng từ các tiêu chuẩn? – MOHAMED

+2

Câu lệnh này không đúng. –

+0

@ H2CO3 - trong trường hợp nào? – djechlin

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