Разница между gcc5 и gcc8 относительно возвращаемых значений функции - PullRequest
0 голосов
/ 21 марта 2020

У меня есть два инструмента: gcc5 и gcc8. Ниже приведен фрагмент кода

bool foo() {
  int var;
  var = 1;
  printf("var=%d\n", var);
}

int calling_foo() {
  foo();
}

Если я компилирую и запускаю w / gcc5, вызов foo () возвращается. Но если я компилирую и запускаю w / gcc8, вызов foo () не возвращается.

Я понимаю, что в foo () нет возвращаемого значения, но, по крайней мере, функция должна вернуться. Я предполагаю, что gcc8 намного строже. Но почему звонок не возвращается.

1 Ответ

1 голос
/ 21 марта 2020

Ваша программа (при условии, что она вызывает calling_foo или foo напрямую) имеет неопределенное поведение, потому что поток выполнения достигнет закрывающей скобки тела функции foo, которое объявлено как возвращающее не-1004 *. Это само по себе вызывает неопределенное поведение в C ++.

Поэтому обе версии G CC верны. Они могут испускать или не испускать любой код, который они хотят. Программа не гарантированно ведет себя каким-либо конкретным образом.

...