Подтвердить что ты не робот

Основное значение возврата GCC по умолчанию не равно нулю

У меня есть некоторые C-программы без явного возврата из main, например:

int main(int argc, char *argv[])
{
  // blah blah
}

Если я скомпилирую их с помощью GCC 4.6.3 и следующих параметров:

gcc file.c -Wall -Wextra

Программы не возвращают 0 и не дают мне проблем, но стандарт (и много других ответов на SO) говорит:

Если тип возврата основной функции является типом, совместимым с int, возврат от начального вызова к основной функции эквивалентен вызову функции выхода со значением, возвращаемым основной функцией в качестве аргумента; [10] достижение}, который завершает основную функцию, возвращает значение 0. Если тип возврата несовместим с int, статус завершения, возвращаемый в среду хоста, не указан.

[10] В соответствии с 6.2.4 времена жизни объектов с автоматической продолжительностью хранения, объявленные в основном, закончились бы в первом случае, даже если они не были бы в последнем.

Мои программы возвращают разные значения, 160, 15, 14... мусор?

Я что-то упустил? Это ошибка GCC? Не удается найти что-либо в онлайн-документе GCC. Является ли GCC еще ссылкой на какой-то старый стандарт C (pre-C99), где это не может быть указано?

4b9b3361

Ответ 1

По умолчанию gcc есть -std=gnu89, который является расширениями C90 + GNU.

И C90 говорит:

(C90, 5.1.2.2.3) "Если основная функция выполняет возврат, который не задает значения, статус завершения, возвращаемый в среду хоста, равен undefined"

Скомпилируется с -std=c99 или -std=gnu99, чтобы иметь возвращаемое значение 0, когда в основной функции возврат не указывается.