#include
int main()
{
printf("hello, world\n");
}
Как вообще ЭТО может работать? Я пробовал запускать в онлайн-компиляторах - не работает.
Да и если так подумать, функция main ничего не возвращает, и include ничего не подключает.
Почему же тогда правильный ответ на тест "программа откомпилируется и отработает, но код завершения будет не определен"??
Другие языки программирования и технологии
Вопрос по языку Си. Почему в тесте написано, что эта программа будет работать?
Смысл #include это добавления текста подключаемого файла, в то место где написан #include. Раньше компиляторы видимо не "ругались" на пустые #include так как все равно ничего не подключаем... return не обязательна... И получается что программа вполне работоспособна, в зависимости от компилятора (у меня на gcc ругается на пустой #include).
Алмаз Аминев
Ну а поему не определен, это надо немного понимать в ассемблере. Функция возвращает результат в регистре eax(для х64 rax). Если вы явно не указали что должна возвращать функция, то при выходе она вернет то, что было в этом регистре. А в этом регистре были результаты вычислений самой функции (программа активно использует регистры общего назначения в том числе и регистр eax)...
Александр Топух
Вот в том-то и проблема. Препод, видимо, делал эти тесты больше 20 лет назад.. Уже ответ "программа завершится без ошибок" не актуален... Компилятор ругается и на пустой include и на то, что функция, объявленная как int ничего не возвращает...
В начальных си void был макросом на int и писалось больше для понятливости, так что всегда функция должна возвращать. Но компиляторы помню сами возврат добавляли, если ты это даже не написал... но проверить бы... давно не лазил в асс код
А так вот пишут:
Когда используется оператор return в main(), программа возвращает код завершения вызывавшему процессу (операционной системе). Возвращаемое значение должно быть целого типа. Большинство операционных систем, трактуют 0 как нормальное завершение программы. Остальные значения воспринимаются как ошибки.
Если не определено возвращаемое значение, то в операционную систему будет передано неизвестное значение. Поэтому гораздо полезнее использовать оператор return.
http://www.c-cpp.ru/books/znacheniya-vozvrashchaemye-funkciey-main
А так вот пишут:
Когда используется оператор return в main(), программа возвращает код завершения вызывавшему процессу (операционной системе). Возвращаемое значение должно быть целого типа. Большинство операционных систем, трактуют 0 как нормальное завершение программы. Остальные значения воспринимаются как ошибки.
Если не определено возвращаемое значение, то в операционную систему будет передано неизвестное значение. Поэтому гораздо полезнее использовать оператор return.
http://www.c-cpp.ru/books/znacheniya-vozvrashchaemye-funkciey-main
Батырбек Турсунов
> Если не определено возвращаемое значение, то в операционную систему будет передано неизвестное значение.
Эта информация устарела. В описание языка добавили исключение, что main автоматически возвращает ноль.
Эта информация устарела. В описание языка добавили исключение, что main автоматически возвращает ноль.
Если это скопировано с этого сайта, то проблема в том, что "Ответы" убивают текст, похожий на HTML-теги, поэтому #include испортился. Простейший способ решения проблемы: вставлять пробел после < если далее идёт латинская буква. #include < stdio.h > проходит.
Функция main ничего не возвращает - это уже глупость авторов языка С++. Придумали исключение, что main может ничего не возвращать (хотя указан тип результата int). В Си это всегда было не запрещено (в другой функции было бы предупреждение).
int main(void)
{
printf("Hello, world!\n");
// нет предупреждения, поскольку это функция main
}
int otherFunc()
{
printf("Hello, world!\n");
// предупреждение или ошибка из-за отсутствия return XXX;
}
Функция main ничего не возвращает - это уже глупость авторов языка С++. Придумали исключение, что main может ничего не возвращать (хотя указан тип результата int). В Си это всегда было не запрещено (в другой функции было бы предупреждение).
int main(void)
{
printf("Hello, world!\n");
// нет предупреждения, поскольку это функция main
}
int otherFunc()
{
printf("Hello, world!\n");
// предупреждение или ошибка из-за отсутствия return XXX;
}
Дамир Бекенов
int main() и без return возвращает значение, просто в погоне за краткостью для нее сделано исключение - если в ней нет return, то return 0; делает сам компилятор. По мне, если уж сделали так для main, надо было делать так и для всех других функций, возвращающих число.
Александр Топух
Не-не. Это вопрос из теста. Дана вот такая программа:
#include
int main()
{
printf("hello, world\n");
}
И вопрос: будет она работать, или нет. Если не будет, то почему.
#include
int main()
{
printf("hello, world\n");
}
И вопрос: будет она работать, или нет. Если не будет, то почему.
на сколько знаю от не возвращения значения main программа не станет не работать но код возвращения скорее всего будет не ноль.
в остальном все нормально
так будет правильнее)))
#include < stdio.h >
void main()
{
printf("hello, world\n");
}
А так вообще идеально:
#include < stdio.h >
int main()
{
printf("hello, world\n");
return 0; // Гарантированно мы получаем код 0 если успешно и 1 если неуспешно
}
в остальном все нормально
так будет правильнее)))
#include < stdio.h >
void main()
{
printf("hello, world\n");
}
А так вообще идеально:
#include < stdio.h >
int main()
{
printf("hello, world\n");
return 0; // Гарантированно мы получаем код 0 если успешно и 1 если неуспешно
}
У меня работает :d


Виктор Лузин
system("pause") не даёт командной строке закрыться. Без неё серое окно показалось и сразу бы закрылось
Александр Топух
А работает, потому что ты написал . Попробуй без него. include должен быть пустым.
Похожие вопросы
- Вопросы по языку СИ
- Что "констант" в языке си? Говорят переменные которые ранее хранятся в программе и их нельзя изменять. Объясните поточнее
- Помогите с разрешением вопроса по языку СИ(не с++)
- Вопрос по языку СИ, конкретнее по передачи байта по UART
- Язык Си. Помогите пожалуйста написать простую программу.
- Как на языке программирования си сделать, чтобы при вводе полного бреда программа не поломалась?
- Помогите, пожалуйста, написать программу на языке Си
- какую программу лучше использовать для программирования на языке Си?
- Как настроить Python под Си? Как написать программу на языке Си в Python'е ?
- Почему язык СИ такой сложный?