Вызов NSLog из C++: «Строка формата не является строковым литералом (потенциально небезопасно)»

Когда я вызываю NSLog из C++, Xcode жалуется, что строка формата, переданная в NSLog, не является буквальной строкой. Вот строка кода, которая вызывает предупреждение:

NSLog(CFSTR("Leaking?"));

Я не знаю, как закодировать литерал NSString в C++, и я не вижу соответствующего предупреждения, которое можно было бы отключить в настройках проекта. Есть ли способ вызвать NSLog из С++, не вызывая это сообщение? Я использую Xcode 4.2.1.

Изменить: это действительно код C++.Обычно я избегаю Objective-C++, придерживаясь либо Objective-C, либо старого доброго C++, потому что нет официальной документации о том, что работает в Objective-C++, а что нет. Я нашел только расплывчатые предупреждения о том, что (например) могут быть проблемы с некоторыми частями STL. Я использую шаблоны, STL и другие «расширенные» возможности C++, поэтому хочу перестраховаться.

Правка №2, решение: я только что выяснил, что clang поддерживает гораздо больше флагов предупреждений, чем задокументировано. (Это должно было быть очевидно из длинного списка предупреждений, которые мне предложил Xcode.) Я попробовал -Wno-format-nonliteral a la gcc, и теперь Xcode доволен.

5
задан dkh 20 March 2012 в 19:26
поделиться