Khi tôi gọi NSLog từ C++, Xcode than phiền rằng chuỗi định dạng được chuyển tới NSLog không phải là chuỗi ký tự. Dưới đây là một dòng mã kích hoạt cảnh báo:Gọi NSLog từ C++: "Chuỗi định dạng không phải là chuỗi chữ (có khả năng không an toàn)"
NSLog(CFSTR("Leaking?"));
Tôi không biết cách nào để mã hóa một NSString chữ trong C++, và tôi không thấy một cảnh báo liên quan Tôi có thể tắt trong các thiết lập dự án . Có cách nào để gọi NSLog từ C++ mà không kích hoạt thông điệp này? Tôi đang sử dụng Xcode 4.2.1.
Chỉnh sửa: Đây thực sự là mã C++. Tôi thường tránh Objective-C++, gắn bó với Objective-C hoặc cũ C++, bởi vì không có tài liệu chính thức về những gì làm việc trong Objective-C++ và những gì không. Tôi đã chỉ tìm thấy những cảnh báo mơ hồ rằng (ví dụ) có thể có vấn đề với một số phần của STL. Tôi sử dụng các mẫu, STL và các tính năng "nâng cao" khác của C++, vì vậy tôi muốn chơi nó an toàn.
Chỉnh sửa # 2, giải pháp: Tôi vừa tìm ra clang hỗ trợ nhiều cờ cảnh báo hơn là thực sự được ghi lại. (Nó phải có được rõ ràng từ danh sách dài các cảnh báo mà Xcode cung cấp cho tôi.) Tôi đã thử -Wno-format-nonliteral a la gcc, và bây giờ Xcode là hạnh phúc.
Nếu bạn đang gọi 'NSLog', là một phần của Foundation, thì bạn đang sử dụng Objective-C. Sử dụng '@" Rò rỉ? "' Và đảm bảo tệp của bạn có phần mở rộng '.mm'. – Joe
@Joe ... trừ khi anh ta có nghĩa là Objective-C++? – csl
@csl Tôi đã chuyển nhận xét đến câu trả lời bằng một số giải thích rõ ràng. – Joe