Следующие сообщения появляются, если компилятор основан на Visual® компилятор. Для получения дополнительной информации смотрите Compiler (-compiler)
.
Когда приложение Visual использует #import
директивы, компилятор Visual C++ генерирует заголовочный файл с расширением .tlh
который содержит некоторые определения. Чтобы избежать ошибок компиляции во время Polyspace® анализ, необходимо указать папку, содержащую эти файлы.
Оригинальный код:
#include "stdafx.h" #include <comdef.h> #import <MsXml.tlb> MSXML::_xml_error e ; MSXML::DOMDocument* doc ; int _tmain(int argc, _TCHAR* argv[]) { return 0; }
Сообщение об ошибке:
"../sources/ImportDir.cpp", line 7: catastrophic error: could not open source file "./MsXml.tlh" #import <MsXml.tlb>
Компилятор Visual C++ генерирует эти файлы в своей папке «build-in» (обычно отладка или релиз). В порядок предоставления этих файлов:
Создайте приложение Visual C++.
Укажите папку сборки для анализа Polyspace.
Использование другого значения с флагом компиляции (#pragma pack
) может привести к сообщению об ошибке связывания.
Оригинальный код:
test1.cpp | type.h | test2.cpp |
---|---|---|
#pragma pack(4) #include "type.h" | struct A { char c ; int i ; } ; | #pragma pack(2) #include "type.h" |
Сообщение об ошибке:
Pre-linking C++ sources ... "../sources/type.h", line 2: error: declaration of class "A" had a different meaning during compilation of "test1.cpp" (class types do not match) struct A ^ detected during compilation of secondary translation unit "test2.cpp"
Чтобы продолжить анализ, используйте опцию Ignore pragma pack directives (-ignore-pragma-pack)
.
Polyspace не поддерживает Microsoft® C + +/CLI, набор языковых расширений для программирования .NET.
Вы можете получить такие ошибки, как:
error: name must be a namespace name | using namespace System;
error: expected a declaration | public ref class Form1 : public System::Windows::Forms::Form