2014-10-21 11 views
12

Trong khi sử dụng gcc, mã:Phần nào trong tiêu chuẩn C89 cho phép quy tắc "ẩn int"?

register a = 3; 
static b = 3; 

nó được cho phép khi sử dụng -std=c89 -pedantic-errors cờ, mặc dù có một cảnh báo.

Tuy nhiên, nó nhận được lỗi với cờ -std=c99 -pedantic-errors.

Tôi tự hỏi mà phần của tiêu chuẩn C89 cho phép "ngầm int" quy tắc?

Trả lời

14

Phần cho phép các ngầm int quy tắc trong C89 sẽ là phần 3.5.2Loại specifiers mà nói (nhấn mạnh tôi):

int, ký kết, ký int, hay không có loại thông số kỹ thuật

Keith Thompson trong các nhận xét chỉ ra rằng trong C90 phần là 6.5.2 và nói, Sự khác biệt duy nhất là một số tài liệu giới thiệu theo yêu cầu của ISO, dẫn đến việc sắp xếp lại các phần.

Trong C99 nơi này đã thay đổi, phần là 6.7.2Loại specifiers và nó nói:

int, ký kết, hoặc ký int

này cũng được đề cập trong tài liệu N661: Disallow implicit "int" in declarations mà nói :

Thay đổi trong 6.5.2 Loại thông số; thêm câu mới tại đầu đoạn đầu tiên của chế: Ít nhất một Bộ xác định kiểu được đưa ra trong các specifiers khai trong một tuyên bố.

Change in 6.5.2 Type specifiers, Constraints, from: 
      -- int, signed, signed int, or no type 
       specifiers 
    to: 
      -- int, signed, or signed int 
+4

Mục 3.5.2 trong tiêu chuẩn 1989 ANSI C là phần 6.5.2 trong tiêu chuẩn ISO C 1990. (Hai tiêu chuẩn mô tả chính xác cùng một ngôn ngữ. Sự khác biệt duy nhất là một số tài liệu giới thiệu theo yêu cầu của ISO, dẫn đến việc sắp xếp lại các phần.) –

+0

@KeithThompson cảm ơn bạn, tôi đã tự hỏi về điều đó từ đề xuất. –

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