Некоторые функции могут быть объявлены в extern "C" { }
блокируйтесь в некоторых файлах, но не в других. В этом случае рычажное устройство отличается, который вызывает ошибку ссылки, потому что оно запрещается стандартом ANSI®.
Оригинальный код:
extern "C" { void* memcpy(void*, void*, int); } class Copy { public: Copy() {}; static void* make(char*, char*, int); }; void* Copy::make(char* dest, char* src, int size) { return memcpy(dest, src, size); }
Сообщение об ошибке:
Pre-linking C++ sources ... <results_dir>/test.cpp, line 2: error: declaration of function "memcpy" is incompatible with a declaration in another translation unit (parameters do not match) | the other declaration is at line 4096 of "__polyspace__stdstubs.c" | void* memcpy(void*, void*, int); | ^ | detected during compilation of secondary translation unit "test.cpp"
Функциональный memcpy
объявляется, когда внешний "C" функционирует и как функцию C++. Это вызывает проблему ссылки. Действительно, функциональное поведение управления отличается, относится ли оно к C или функции C++.
Когда такая ошибка происходит, решение состоит в том, чтобы гомогенизировать объявления, т.е. добавить extern "C" { }
вокруг предыдущего перечислил функции C.
Другое решение состоит в использовании разрешающей опции -no-extern-C
. Это удаляет весь extern "C"
объявления.
signal.h
заблокирован с функциональными ограничениями: signal
и raise
функции не следуют за связанной функциональной моделью. Даже если функциональное повышение называется, сохраненный указатель функции, сопоставленный к номеру сигнала, не называется.
Никакой скачок не выполняется даже если setjmp
и longjmp
функции вызваны.
errno.h
частично заблокирован. Некоторые математические функции не устанавливают errno
, но вместо этого, сгенерируйте красную ошибку, когда область значений или доменная ошибка произойдут при проверках ASRT.
Можно также использовать опцию компиляции POLYSPACE_STRICT_ANSI_STANDARD_STUBS
D
флаг. Эта опция только деактивировала расширения ANSI C стандарт libC, включая функции bzero
, bcopy
, bcmp
, chdir
, chown
близко
, fchown
, fork
, fsync
, getlogin
, getuid
, geteuid
, getgid
, lchown
, link
, pipe
чтение
, pread
, resolvepath
, setuid
, setegid
, seteuid
, setgid
, sleep
, sync
, symlink
, ttyname
, unlink
, vfork
запись
, pwrite
открытый
, creat
, sigsetjmp
, __sigsetjmp
, и siglongjmpare
.