Попытка включить некоторые уровни предупреждений на базе кода 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 ++»?
они испортили это предупреждение до такой степени, чтобы сделать его в основном «вы использовали setjmp в программе на C ++»?
Похоже на то.
Я бы, наверное, сам отнес это к ошибке. Но это было легче внести предложение на сайте Microsoft. Предложения можно голосовать, там …
Других решений пока нет …