Странное 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 не будет искать определения. В определенных конфигурациях это фактически гарантирует, что реализация интерфейса имеет соответствующие обозначения.

Другие вопросы по тегам