Для проекта мы переключили проект с Windows на Linux, и хотя PC-LINT прекрасно работает с Wine, я не могу запустить PC-LINT с помощью простой тестовой программы. PC-LINT всегда жалуется на заголовки STL. Я просмотрел всю документацию Gccpel о gcc и использовал co-gcc.h и сгенерировал lint_cppmac.h, Размер-options.lnt а также НКУ-включать-path.lnt — Мы используем версию PC-LINT 9.00k и я попробовал также с 9.00k4. gcc — это версия 4.8.2 в Ubuntu 14.04 LTS.
Итак, вот что я делаю:
lint-nt.sh -voip +b std.lnt /home/test/test.cpp
lint-nt.sh — это всего лишь вспомогательный скрипт для запуска PC-LINT под Linux с Wine и для преобразования вывода (то есть обратная косая черта в косую черту …) и содержит следующее:
#!/bin/bash
DIR=`dirname $0`
# Options that are passed to PC-Lint before any other options.
# -fff: Under Linux, filenames are case-sensitive.
# +rw(__is_pod): __is_pod is a GCC toolchain-specific keyword.
PREOPTS="-fff +rw(__is_pod)"wine ${DIR}/LINT-NT.EXE $PREOPTS "$@" | tr '\\\r' '/ '
test.cpp содержит следующее:
#include <iostream>
class Base {
public:
Base(int i) : m_i(i), m_pi(new int[i]) { }
~Base() {}
int get() { std::cout << m_i << std::endl; return m_i; }
private:
int m_i;
int *m_pi;
};
std.lnt просто содержит следующее (файлы по умолчанию из gimpel)
co-gcc.lnt // gcc compiler options
lib-stl.lnt // STL
Поэтому при запуске я получаю эту ошибку (фрагмент)
/home/test/test.cpp 11 Info 783: Line does not end with new-line
_
Base(int i) : m_i(i), m_pi(new int[i]) { }
/home/test/test.cpp 5 Info 1732: new in constructor for class 'Base' which
has no assignment operator
/home/test/test.cpp 5 Info 1733: new in constructor for class 'Base' which
has no copy constructor
/home/test/test.cpp 5 Info 737: Loss of sign in promotion from int to
unsigned int
_
~Base() {}
/home/test/test.cpp 6 Warning 1540: Pointer member 'Base::m_pi' (line 10)
neither freed nor zeroed by destructor
/home/test/test.cpp 10 Info 830: Location cited in prior message
_
int get() { std::cout << m_i << std::endl; return m_i; }
/home/test/test.cpp 7 Error 40: Undeclared identifier 'cout'
/home/test/test.cpp 7 Info 701: Shift left of signed quantity (int)
/home/test/test.cpp 7 Error 40: Undeclared identifier 'endl'
/home/test/test.cpp 7 Warning 504: Unusual shift operation (left side unparenthesized)
/home/test/test.cpp 7 Info 701: Shift left of signed quantity (int)
/home/test/test.cpp 7 Warning 522: Highest operation, operator '<<', lacks side-effects
/home/test/test.cpp 7 Info 1762: Member function 'Base::get(void)' could be made const
_
};
/home/test/test.cpp 11 Info 1712: default constructor not defined for class
'Base'
--- Wrap-up for Module: /home/tall/test.cpp
Info 753: local class 'Base' (line 3, file /home/tall/test.cpp) not referenced
/home/test/test.cpp 3 Info 830: Location cited in prior message
Info 766: Header file '/usr/include/c++/4.8/iostream' not used in module '/home/test/test.cpp'
Я пытался с использованием пространства имен STD и без. Я пробовал тестовые файлы с <string>
и это становится еще хуже.
Я ценю каждый намек, чтобы это работало.
заранее спасибо
Задача ещё не решена.