Попытка включить некоторые уровни предупреждений в кодовой базе C, которая также строится как C++. Я даю Visual Studio шанс (по какой-то причине).
Получил предупреждение о взаимодействиях с setjmp, несмотря на отсутствие соответствующих деструкторов. поэтому я сделал тест:
#include <setjmp.h>
struct X { int y; };
int main() {
struct X x;
jmp_buf buf;
if (setjmp(buf) == 0) {
longjmp(buf, 1);
} else {
// whatever.
}
}
Включение предупреждения в командной строке:
C:\wherever>cl /we4611 test.cpp
test.cpp test.cpp(9): ошибка C4611: взаимодействие между '_setjmp' и уничтожением объекта C++ не переносимо
Это кажется чрезвычайно полезным предупреждением — если оно предупреждало меня о пересечении кода деструктора C++. Но это тип POD. Кода деструктора быть не должно.
Я что-то здесь упустил, или они испортили это предупреждение до такой степени, что оно стало в основном «вы использовали setjmp в программе на C++»?
cl /we4611 /Ox test.cpp
) предупреждение все равно выдается. :-( - person HostileFork says dont trust SE   schedule 29.07.2017