С GCC я могу указать __attribute__((format(printf, 1, 2)))
, сообщая компилятору, что эта функция принимает параметры vararg, которые являются спецификаторами формата printf.__attribute __ ((формат (printf, 1, 2))) для MSVC?
Это очень полезно в тех случаях, когда я обертываю, например. семейство функций vsprintf. Я могу иметь
И всякий раз, когда я вызываю эту функцию, gcc проверяет, соответствуют ли типы и количество аргументов заданным спецификаторам формата, как и для printf, и выдавать предупреждение, если нет.
У компилятора Microsoft C/C++ есть что-то похожее?
На самом деле, похоже, что проверка завершена: см. [Ответ шестизначных переменных] (http://stackoverflow.com/questions/2354784/attribute-formatprintf-1-2-for-msvc/6849629#6849629). –
@RaphaelISP: Если вы прочтете ссылку в этом ответе, вы увидите, что аннотации SAL игнорируются, если параметр [/analyze](http://msdn.microsoft.com/en-us/library/ms173498.aspx) , и это доступно только в корпоративных версиях Visual Studio. Кроме того, проверки, которые затем выполняются, не имеют того же типа, что и GCC. Альтернативный ответ через год после запроса вряд ли оправдал нисходящий ответ на принятый ответ, не понимая применимости альтернативы. – Clifford
@Raphae:/анализ выполняет ряд проверок, связанных с строками типа printf (см. [C6270-C6274] (http://msdn.microsoft.com/en-us/library/a5b9aa09.aspx) и др.), Но они не так глубоки, как GCC. Единственное в-предприятии - это только проблема «сорта», так как вам следует избегать VS, если вы его не покупаете. – user7116