Clang предупреждение в сомнительном случае: функция ‘foo’ может быть объявлена ​​с атрибутом ‘noreturn’?

Я немного поигрался с атрибутом [[noreturn]], который я пытаюсь понять и использовать (я понимаю, [[noreturn]] это C ++ 11 стандартный атрибут а также __attribute__((noreturn)) является расширением GCC / Clang). В рамках этого я включил предупреждение Clang -Wmissing-noreturn.

> clang++ -v
Ubuntu clang version 3.7.1-svn253742-1~exp1 (branches/release_37) (based on LLVM 3.7.1)
Target: x86_64-pc-linux-gnu
Thread model: posix

foo.cpp:

enum bar
{
A = 1,
B,
C
};

void foo()
{
switch (bar())
{
case A:
case B:
case C:
default:
break;
}
}

int main()
{
foo();
return 0;
}

Затем скомпилируйте:

> clang++ foo.cpp -o foo -Wmissing-noreturn -std=c++14
foo.cpp:9:1: warning: function 'foo' could be declared with attribute 'noreturn'
[-Wmissing-noreturn]
{
^
1 warning generated.

Мне кажется, что это вернется! Что тут происходит? Это ошибка компилятора?

Если вы удалите «= 1» из A, то он прекрасно скомпилируется без предупреждения.

Если я сделаю функцию foo () [[noreturn]] void foo()затем происходит сбой при ошибке сегментации.

2

Решение

Хорошо, извините за удаление последнего ответа. Это было не правильно. Хорошо, noreturn означает, что функция никогда не заканчивается. и сегментация должна быть потому, что бар не является переменной

-1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]