С 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 ++ компилятор имеют что-либо подобное?
В то время как GCC проверяет спецификаторы формата, когда -Wformat включен, VC ++ не имеет такой проверки даже для стандартных функций, поэтому нет эквивалента этому __ attribute__
, потому что нет эквивалента -Wformat.
Я думаю, что акцент Microsoft на C ++ (о чем свидетельствует поддержание соответствия ISO для C ++ при поддержке только C89) может быть отчасти причиной того, что VC ++ не имеет проверки спецификатора формата; в C ++ использование спецификаторов формата
не требуется.