2010-05-24 4 views
5

GCC thích nói với tôi rằng tôi thiếu danh sách-trình định danh-vòng loại trong thông báo lỗi của nó.Danh sách-trình định tính-danh sách là gì?

Tôi biết điều này có nghĩa là tôi đã không đặt đúng loại thứ gì đó.

Nhưng chính xác thì danh sách-trình phân định vòng loại định danh nào?

Edit:

Ví dụ C mã mà nguyên nhân này:

#include <stdio.h> 

int main(int argc, char **argv) { 
    struct { undefined_type *foo; } bar; 
    printf("Hello, world!"); 
} 

Cung cấp cho các lỗi từ GCC:

Lappy:code chpwn$ gcc test.c 
test.c: In function ‘main’: 
test.c:4: error: expected specifier-qualifier-list before ‘undefined_type’ 
+2

Có lẽ bạn có thể hiển thị ví dụ về một dòng mã tạo lỗi? –

+1

Rất khó cho những người trong chúng ta đã học được cách không phạm sai lầm mà bạn đang làm để đoán xem bạn đang làm gì sai - vì thế một minh họa sẽ giúp ích rất nhiều. –

+1

Tôi đã thêm một ví dụ. –

Trả lời

5

Đó là một danh sách các specifiers và vòng loại :-) Specifiers những điều như void, char, struct Foo, v.v ... và các loại vòng loại là các từ khóa như constvolatile. Xem this C grammar để biết định nghĩa.

Trong trường hợp của bạn, undefined_type chưa được xác định, do đó trình phân tích cú pháp đã xem nó làm số nhận dạng chứ không phải danh sách-trình định danh định danh như mong đợi. Nếu bạn đã đến typedef ... undefined_type; trước khi xảy ra, thì undefined_type sẽ trở thành một người chỉ định.

Nếu bạn nghĩ về phân tích cú pháp C với ngữ pháp không có ngữ cảnh, cách trình biên dịch xử lý typedef và điều đó có thể khó chịu. Nếu tôi hiểu chính xác, nó sẽ phát máy phát cú pháp bằng cách lén lút trong các hoạt động của bảng biểu tượng để nó có thể sử dụng ngữ cảnh để phân tích cú pháp mã nguồn.