2009-09-08 24 views
5

Trong ví dụ sau:lỗi sử dụng hạn chế từ khóa

void foo (double *ptr) 
{ 
    const double * restrict const restr_ptr=ptr; 
} 

tôi nhận được lỗi này:

error: expected a ";"  const double * restrict const restr_ptr=ptr; 
                ^

tôi biên dịch với -std = c99, sử dụng gcc 3.4

Bất kỳ ý tưởng?

+0

Nó biên dịch cho tôi tốt. Bạn đã có phiên bản GCC gần đây chưa? –

+0

Mã đó biên dịch cho tôi trên Sun C 5.8 và GCC 3.4.6. Comeau trực tuyến chỉ phàn nàn về khai báo biến không sử dụng. Vui lòng cung cấp thêm chi tiết về môi trường của bạn. –

+0

... nhưng Comeau ở chế độ C99. Khi tôi đặt nó ở chế độ C++, nó phàn nàn về cùng một thứ. –

Trả lời

9

Trong C++, restrict không phải là từ khóa (ngoại trừ Microsoft extensions). Nó không có nghĩa là nó làm gì trong C. Có vẻ như bạn đã cố gắng áp dụng chế độ C99 cho trình biên dịch C++ của bạn. Sử dụng trình biên dịch C để biên dịch mã C và sử dụng trình biên dịch C++ để biên dịch C++. Cả hai ngôn ngữ là một tập hợp con của ngôn ngữ khác.

+0

Agh, điều đó giải thích. Tôi không thể biên dịch bằng cách sử dụng trình biên dịch C khi tôi sử dụng các tính năng C++ trong đó giới hạn được sử dụng. Cách giải quyết là gì, nếu có? – vehomzzz

+4

Thử '__restrict'. Có vẻ như đó là phần mở rộng GCC cũng như phần mở rộng của Microsoft. Hãy xem xét tóm tắt nó với một macro để không GCC, trình biên dịch không MS không bị nghẹt thở trên nó. –

+0

__restrict đã thực hiện thủ thuật .. cảm ơn – vehomzzz

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