Странное SAL аннотации предупреждение
Я пытаюсь использовать аннотацию SAL Micosoft для своего проекта, однако получаю следующее предупреждение и не знаю почему.
В качестве примера я создал новое консольное приложение C++ и получил следующий код:
#include <sal.h>
class Whatever
{
public:
_Check_return_ int Method(__in int number) ;
};
int main()
{
return 0;
}
Когда я компилирую с использованием Visual Studio 2008, я получаю следующее предупреждение:
предупреждение C6540: использование аннотаций атрибутов в этой функции сделает недействительными все существующие аннотации __declspec
В файле "c1xxast"
Что я делаю неправильно? Если я удалю либо _Check_return_
или __in
предупреждение уходит.
Я не могу найти ссылку на предупреждение C6550. Однако тот же текст можно найти здесь: http://msdn.microsoft.com/en-us/library/dd445322.aspx, но это не очень полезно.
2 ответа
Проблема может быть в том, что вы смешиваете типы аннотаций SAL. Хотя в MSDN это очень четко указано, существует два типа аннотаций SAL: атрибут и... э... нет.
#define
в <sal.h>
VC2005 использует версии без атрибутов и начинается с подчеркивания, за которым следует строчная буква. Более новые версии VC2008 расширяются до атрибутов компилятора и начинаются (и заканчиваются) подчеркиванием, за которым следует заглавная буква.
Вы смешали два типа:
Атрибут:
- _В_
- _Check_return_
Non-атрибут:
- __в
- __checkReturn
Попробуйте изменить свои аннотации для последовательного использования одного типа.
Этот пост в блоге объясняет немного больше об этом.
Вы должны добавить аннотации SAL как в объявление, так и в определение метода. Я предполагаю, что SAL расстроен, потому что он не может найти определение метода и предполагает, что атрибуты отсутствуют.
РЕДАКТИРОВАТЬ Уточнение
Аннотации SAL должны появляться в обоих местах для неабстрактных методов. Для абстрактных методов SAL не будет искать определения. В определенных конфигурациях это фактически гарантирует, что реализация интерфейса имеет соответствующие обозначения.