2015-05-17 6 views
1

Я только что скомпилировал программу hello world c с помощью gcc и запустил ее в ubuntu. Поскольку я запускал его через emacs, я получил код выхода программы: 13. Почему 13? Я ничего не указывал, так почему же он не по умолчанию 0? Когда я положил функцию выхода в конце, я мог бы ее изменить, но мне интересно, что такое значение по умолчанию.Hello world exit code

Код:

#include<stdio.h> 

int main() 
{ 
    printf("Hello, world!"); 
} 
+0

ухода на сообщение ваш код, чтобы мы могли вам помочь;) –

+3

В объявлении вашей функции говорится, что он вернет 'int', но у вас нет оператора' return'. Следовательно, то, что он возвращает, является случайным. Если вы ожидаете, что он вернет ноль, когда нет ошибки, верните ноль. Где в определении языка C вы видите, что возвращаемое по умолчанию значение из функции, которая не возвращает значение, будет равна нулю? –

+1

Вам нужно включить 'return 0;' в конце 'main'. Кроме того, 'main' должен быть объявлен как' int main (int argc, char ** argv) ' – reirab

ответ

5

По C99, дойдя до конца main без возврата то же самое, как если бы вы вернулись к нулю (только main не все функции в целом). До C99 (и я полагаю, что gcc по умолчанию соответствует C89/90 в качестве базовой линии), не было определено, что произойдет, поэтому вы должны явно возвращать нуль, если это то, что вам нужно.

Или вы можете принять C99/C11 путем компиляции с -std=c99 или c11.

С точки зрения того, почему 13, он не является ни релевантным, ни портативным, но, скорее всего, код возврата - это то, что происходит в регистре eax (или эквивалент, если вы используете другое соглашение или архитектуру). Для x86 это, вероятно, все равно будет значением, которое было возвращено из printf, которое возвращает количество напечатанных символов.

-3

Либо вы можете использовать вакуум основные() вместо INT основных(), так что вы не должны давать какой-либо тип возвращаемого значения, но если вы используете ИНТ основного, то вы должны обеспечить оператор возврата

+2

** - 1 ** "вы можете использовать void main()" неверно. «вы должны предоставить заявление о возврате» неверно. –