Kiedy wywołuję NSLog z C++, Xcode skarży się, że ciąg znaków przekazany do NSLog nie jest dosłownym łańcuchem znaków. Oto linia kodu, który wyzwala ostrzeżenie:Wywołanie NSLog z C++: "Ciąg formatu nie jest literałem łańcuchowym (potencjalnie niepewnym)"
NSLog(CFSTR("Leaking?"));
nie jestem świadomy jakikolwiek sposób kodować dosłownego NSString w C++, a nie widzę odpowiedniego ostrzeżenia można wyłączyć w ustawieniach projektu . Czy istnieje sposób wywołania NSLog z C++ bez wywoływania tej wiadomości? Używam Xcode 4.2.1.
Edytuj: To naprawdę jest kod C++. Zazwyczaj unikam Objective-C++, przylegając do Clucji Objective-C lub zwykłego C++, ponieważ nie ma oficjalnej dokumentacji na temat tego, co działa w Objective-C++, a co nie. Znalazłem tylko niejasne ostrzeżenia, że (na przykład) mogą wystąpić problemy z niektórymi częściami STL. Używam szablonów, STL i innych "zaawansowanych" funkcji C++, więc chcę je bezpiecznie odtworzyć.
Edytuj # 2, rozwiązanie: Po prostu zorientowałem się, że klang obsługuje o wiele więcej flag ostrzegawczych niż faktycznie udokumentowanych. (Powinno to być oczywiste z długiej listy ostrzeżeń, które zaoferował mi Xcode.) Próbowałem -Wno-format-nonliteral a la gcc, a teraz Xcode jest szczęśliwy.
Jeśli dzwonisz 'NSLog', który jest częścią Foundation, to używasz Objective-C. Użyj '@" Leaking? "I upewnij się, że twój plik ma rozszerzenie' .mm'. – Joe
@Joe ... chyba że ma na myśli Objective-C++? – csl
@csl Przenieśliłem komentarz do odpowiedzi z pewnym wyjaśnieniem. – Joe