__ припишите __ ((формат (printf, 1, 2))) для MSVC?

С GCC я могу определить __attribute__((format(printf, 1, 2))) , сообщение компилятора, что эта функция берет vararg параметры, которые являются printf спецификаторами формата.

Это очень полезно в случаях, где я переношусь, например, семья функции vsprintf. Я могу иметь extern void log_error(const char *format, ...) __attribute__((format(printf, 1, 2)));

И каждый раз, когда я вызываю эту функцию, gcc проверит, что типы и количество аргументов соответствуют данным спецификаторам формата, как это было бы для printf, и выпустите предупреждение если нет.

Microsoft C/C ++ компилятор имеют что-либо подобное?

23
задан nos 1 March 2010 в 09:21
поделиться

1 ответ

В то время как GCC проверяет спецификаторы формата, когда -Wformat включен, VC ++ не имеет такой проверки даже для стандартных функций, поэтому нет эквивалента этому __ attribute__ , потому что нет эквивалента -Wformat.

Я думаю, что акцент Microsoft на C ++ (о чем свидетельствует поддержание соответствия ISO для C ++ при поддержке только C89) может быть отчасти причиной того, что VC ++ не имеет проверки спецификатора формата; в C ++ использование спецификаторов формата не требуется.

5
ответ дан 29 November 2019 в 02:41
поделиться