C/C++ - Помогите в изучении C.

Аватара пользователя
Efimalex

C/C++ - Помогите в изучении C.

Сообщение Efimalex »

Добрый вечер. Решил я попытаться освоить программирование, решил начать с C. До этого с программированием дела не имел ( школьный курс Basic не в счет ). Читаю книгу Д. Ритчи & Керниган Б. Язык программирования С., поставил Eclipse, компиляторы MinGW. Начал писать, а вернее списыватьИзображение, свою первую программу. Текст программы взят из книги.



Код:

Код: Выделить всё

#include 
main()
{
    printf("Hello, world\n");
}

eclipse после компиляции выдавал две ошибки, хотя и запускал программу. Они пропали после того как текст изменил на



Код:

Код: Выделить всё

#include 
int main()
{
    printf("Hello, world\n");
    return 0;
}

Этот текст я взял в инете. Объясните в чем разница? Что такое int я разобрался, но зачем в данной программе нужно указывать тип функции? И про return 0
Аватара пользователя
torauma

Re: C/C++ - Помогите в изучении C.

Сообщение torauma »

Цитата Efimalex:



eclipse после компиляции выдавал две ошибки, хотя и запускал программу.
C/C++ - Помогите в изучении C.




Не ошибки, а предупреждения (warning). Это просто указание на места в коде, которые хоть и являются синтаксически допустимыми, но кажутся компилятору странными или не соответствуют стандарту. Их можно не исправлять, если вы уверены, что они не приведут к ошибкам.

Скорее всего у вас используется компилятор C++, а не C. В стандарте С++ есть требование, что функция main должна возвращать целочисленный код завершения. return 0, в данном случае означает, что программа при успешном завершении передает операционной системе код завершения 0. Обычно код завершения 0 означает успешное завершение программы, другими значениями обозначают аварийное завершение.
Аватара пользователя
torauma

Re: C/C++ - Помогите в изучении C.

Сообщение torauma »

Цитата Efimalex:



Объясните в чем разница?
C/C++ - Помогите в изучении C.




В настройках компилятора?



Код:

Код: Выделить всё

#include 
main()
{
printf("Hello, world\n");
}

У меня в среде Dev-C++ ошибок не наблюдается.
Аватара пользователя
Efimalex

Re: C/C++ - Помогите в изучении C.

Сообщение Efimalex »

Efimalex, если кратко, то
Большая разница: int main() или void main()?


return 0 - возвращает ноль компилятору, свидетельствуя о том, что функция (программа) завершена правильно.

Иностранные источники:

stackoverflow.com What is the proper declaration of main


msdn.microsoft.com Main() Return Values (C# Programming Guide)


stackoverflow.com What should main return in c and c
Аватара пользователя
Efimalex

Re: C/C++ - Помогите в изучении C.

Сообщение Efimalex »

Как бы стыдно не было это писать, но надоИзображение Кто бы за меня нажал Ctrl+S перед Build Изображение на другом ноуте в Eclipse это делалось автоматом.
Аватара пользователя
Iska

Re: C/C++ - Помогите в изучении C.

Сообщение Iska »

Цитата lxa85:



return 0 - возвращает ноль компилятору
C/C++ - Помогите в изучении C.




Может быть операционной системе?
Аватара пользователя
lxa85

Re: C/C++ - Помогите в изучении C.

Сообщение lxa85 »

torauma, может и операционной системе, не знаю. Изображение

Главное куда-то "вышестоящей системе", которая примет решение о дальней судьбе программы.

Операционной системы... Нашел.

Есть такая любопытная вещь
OSv
. (
Краткая справка на opennet.ru
)

Там куда 0 возвращается, тоже в операционную систему?

Или она там такая "тонкая", что почти как гипервизор? Изображение

Iska, на msdn явное упоминание С++ на нашел, т.к. С++ и С# языки родственные + на stackoverflow попадаются вырезки из стандартов, оставил.
Аватара пользователя
Iska

Re: C/C++ - Помогите в изучении C.

Сообщение Iska »

lxa85, тут что-то всё в кучу — и C, и C++, и C#.
Аватара пользователя
Iska

Re: C/C++ - Помогите в изучении C.

Сообщение Iska »

Цитата torauma:



Точно могу сказать, что код завершения компилятору не передается, т.к. к моменту его передачи компилятор все свои задачи уже выполнил.
C/C++ - Помогите в изучении C.




Или все таки компилятору? Изображение

Нет, в целом я согласен, что моя формилировка вызывает вопросы, просто спортивный интерес.



AFAIK программы написанные в среде .Net в строгом смысле не являются непосредственно исполняемыми на процессоре. Они находятся в некотором промежуточном коде, и исполняются компилятором "на лету". Т.е. компилируя программу в .NET мы получаем переносимый код. А его исполнение зависит от оболочки на каждой конкретной архитектуре. По смыслу очень похоже на технологию Java.
Аватара пользователя
lxa85

Re: C/C++ - Помогите в изучении C.

Сообщение lxa85 »

Спасибо, с этим вроде разобрался. Если что компилятор ставил как тут написано
http://www3.ntu.edu.sg/home/ehchua/p...wTo.html#mingw
Ответить

Вернуться в «Программирование и базы данных»