9

Tôi đang cố gắng loại bỏ một cảnh báo gây phiền nhiễu mà CLANG/LLVM 3.0 mang lại cho tôi. Tôi đã Ivar sau đặt trong đối tượng của tôi:Thuộc tính được giả định là nguyên tử theo mặc định

bool preloaded; 

Và việc kê khai tài sản sau đây:

@property(readonly) bool preloaded; 

Và cuộc gọi tổng hợp sau đây:

@synthesize preloaded; 

Khi đứng, trình biên dịch phàn nàn :

Property is assumed atomic by default

Nếu tôi thay đổi việc kê khai tài sản để thêm "nguyên tử":

@property(atomic,readonly) bool preloaded; 

Nó phàn nàn về điều đó, quá:

error: expected a property attribute before 'atomic'

Vì vậy, nó dường như tôi đang nguyền rủa nếu tôi làm và nguyền rủa nếu tôi don' t ... Có cái gì tôi đang mất tích?

+0

Vâng, 'nguyên tử' không phải là từ khóa thuộc tính hợp lệ, do đó, điều đó có nghĩa là bit thứ hai gây ra lỗi. Dunno về việc đầu tiên, mặc dù. –

+0

Vâng, đó là những gì tôi đã tìm, nhưng nhìn thấy như thế nào Xcode cú pháp nổi bật "nguyên tử", tôi figured rằng có lẽ họ đã thêm nó như là một từ khóa thuộc tính hợp lệ. – Karl

+0

Tôi đã thử cài đặt «@property (atomic, readonly) bool;' và nó biên dịch tốt. Nó cũng loại bỏ cảnh báo. Tôi đang sử dụng Xcode 4.2.1. –

Trả lời

9

Dường như bạn có Tài sản mục tiêu nguyên tử ngầm C-Cấm Cảnh báo trình biên dịch LLVM được bật trong cài đặt dự án của bạn. Tắt tính năng này sẽ xóa cảnh báo.

Như đã lưu ý ở trên, atomic không phải là từ khóa hợp lệ và chỉ được ngụ ý bởi sự vắng mặt của nonatomic. Từ của Apple Declared Properties documentation:

You can use this attribute to specify that accessor methods are not atomic. (There is no keyword to denote atomic.)

+0

Tôi sẽ đánh dấu điều này là "chính xác" vì việc tắt cài đặt sẽ loại bỏ cảnh báo, nhưng tôi vẫn đang bối rối vì sao các thuộc tính đó bị gắn cờ để bắt đầu. Nó là một lỗi trong LLVM? Tôi rất hạnh phúc nếu tôi có thể giữ mọi cảnh báo được kích hoạt ... – Karl

+2

Cảnh báo không chỉ là trò chơi thỏa mãn trình biên dịch, chúng còn là lời nhắc nhở cho nhà phát triển biết về các hành vi nhất định trong khi lập trình. Để giữ cho cảnh báo được kích hoạt nhưng vô hiệu hóa cá thể này, hãy xem [Kiểm soát các chẩn đoán phân tích tĩnh] (http://clang.llvm.org/docs/UsersManual.html#diagnostics) trong tài liệu Clang. – jnic

+0

Tuyệt vời! Tiếng Anh> Tiếng Việt! Bây giờ tôi có thể biên dịch với tất cả các cảnh báo ngoại trừ pedantic (do việc tôi sử dụng ## __ VA_ARGS__ để đăng nhập) – Karl

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