Помогите в изучении C.
Добрый вечер. Решил я попытаться освоить программирование, решил начать с C. До этого с программированием дела не имел ( школьный курс Basic не в счет ). Читаю книгу Д. Ритчи & Керниган Б. Язык программирования С., поставил Eclipse, компиляторы MinGW. Начал писать, а вернее списывать:), свою первую программу. Текст программы взят из книги.
Код:
#include <stdio.h> Код:
#include <stdio.h> |
Цитата:
Скорее всего у вас используется компилятор C++, а не C. В стандарте С++ есть требование, что функция main должна возвращать целочисленный код завершения. return 0, в данном случае означает, что программа при успешном завершении передает операционной системе код завершения 0. Обычно код завершения 0 означает успешное завершение программы, другими значениями обозначают аварийное завершение. |
Цитата:
Код:
#include <stdio.h> |
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 |
lxa85, тут что-то всё в кучу — и C, и C++, и C#.
|
Цитата:
|
torauma, может и операционной системе, не знаю. :)
Главное куда-то "вышестоящей системе", которая примет решение о дальней судьбе программы. Операционной системы... Нашел. Есть такая любопытная вещь OSv. (Краткая справка на opennet.ru) Там куда 0 возвращается, тоже в операционную систему? Или она там такая "тонкая", что почти как гипервизор? :) Iska, на msdn явное упоминание С++ на нашел, т.к. С++ и С# языки родственные + на stackoverflow попадаются вырезки из стандартов, оставил. |
lxa85, не знаю как там OSv устроена, но в Линуксе и Винде, если я правильно помню, передается родительскому процессу. А передачей информации между процессами вроде как ОС занимается.
Точно могу сказать, что код завершения компилятору не передается, т.к. к моменту его передачи компилятор все свои задачи уже выполнил. |
Цитата:
Нет, в целом я согласен, что моя формилировка вызывает вопросы, просто спортивный интерес. AFAIK программы написанные в среде .Net в строгом смысле не являются непосредственно исполняемыми на процессоре. Они находятся в некотором промежуточном коде, и исполняются компилятором "на лету". Т.е. компилируя программу в .NET мы получаем переносимый код. А его исполнение зависит от оболочки на каждой конкретной архитектуре. По смыслу очень похоже на технологию Java. |
Спасибо, с этим вроде разобрался. Если что компилятор ставил как тут написано http://www3.ntu.edu.sg/home/ehchua/p...wTo.html#mingw
|
lxa85, c .NET я не сталкивался, а Java компилируется в байткод, который потом выполняется на специальной виртуальной машине JVM. Согласитесь, javac никаких кодов завершения не получает, т.к. в выполнении программы не участвует.
|
Итак, добрался я до следующей программы:
Код:
#include <stdio.h> Код:
int fahr, celsius; Цитата:
|
Цитата:
Что получится при обычном делении 5 на 9? «0.5(5)» — «0.5555555555555555555555555555555…». Операция деления над двумя целыми числами даёт целочисленный результат, т.е. вся дробная часть — «.5555555555555555555555555555555…» просто теряется, остаётся только «0». При делении 10 на 9 будет 1 («1.1111111111111111111111111111111»), 20/3 = 6 («6.6666666666666666666666666666667»). |
В упражнении нужно переделать программу наоборот. Вот что получилось
Код:
Код:
printf("%5.1f %8.1f\n%" , celsius, fahr); Когда указал в спецификации что выводить нужно с точностью до сотых, начала выводить нормально, 162,2 323,96. Это что, шло округление? Я думаю, не должно, ведь он должен просто откинуть все что идет после десятых долей, или я не прав? |
|
Добрый вечер. Помогите разобраться вот в чем. Поставил на другой ноут(Win7 x86) Eclipse и MinGW. При запуске Build, создается лишь папка Debug, а бинарный фал нет. Но если использовать готовый проект Hello World ANSI C Project с кодом:
Код:
============================================================================ Код:
#include <stdio.h> gcc -O0 -g3 -Wall -c -fmessage-length=0 -o h.o "..\\h.c" gcc -o hk.exe h.o c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../libmingw32.a(main.o):main.c.text.startup+0xa7): undefined reference to `WinMain@16' collect2.exe: error: ld returned 1 exit status 22:55:18 Build Finished (took 1s.715ms) |
Цитата:
Но, имхо, изучать С(а не C#) на базе допотопных средств из 1980-х годов на сегодня негоже (это на совести старых авторов (Ритчи и т.п.), читающих многолетние курсы для профессионалов, для таких случаев можно и так). Нужно поставить какую-нибудь версию MSVisualStudio из современных и изучать программирование, исходя из ее особенностей, интерфейса, потому что все это изучение нужно для возможности в перспективе создать что-то современно-полезное, а не просто сдать экзамен по началам С и забыть надолго. Примерно так http://msdn.microsoft.com/ru-ru/library/k1sx6ed2.aspx (У меня без всяких вопросов все сразу заработало) Иначе неизбежно будут горы ненужных для изучения проблем в разных версиях, которые в последнем вопросе. Можно там в Studio обыгрывать примерчики с фаренгейтами из Ритчи. |
alef2474, можете пояснить — с какого перепуга MinGW и Eclipse в Ваших устах превратились в «допотопные средства из 1980-х годов»?
|
Цитата:
В любом случае, имхо, это несовременно изучать отмирающие версии языка и старые грабли версий для новичка, в моей ссылке на MS, кстати отвечены варианты написания main() Управление памятью значительно усовершенствовано в C# по сравнению с C++ Имхо, нужно изучать не только язык, но и нормальную среду программирования, а не что-то минималисткое, вызывающее вопросы. Если я неправ, объясните в чем. Вы ответите про return EXIT_SUCCESS; и stdlib из последнего вопроса? |
Цитата:
Цитата:
|
Так что мне делать, в какую сторону "копать" то хоть?
|
Код:
#include <iostream> Цитата:
|
Цитата:
|
Цитата:
Возможно, мы с Iska друг друга неправильно поняли. Я имел в виду, что в любом деле лучше пользоваться наилучшим имеющимся инструментом, например, копать землю острой и легкой лопатой, а не тупой и тяжелой. Можно изучать Windows на примере windows 98 или ХР(знакомясь с их глюками), а можно на примере win 8. Программирование на чем угодно - это прежде всего способность самому понять и найти свои ошибки и исправить и потом меньше их допускать. Hello world очень здорово выглядела в 1960-70-е годы, когда электрическая консольная машинка в большом машинном зале, заставленном шкафами, составлящими один компьютер, вдруг оживала и начинала сама печатать "Hello world!", при этом клавиши на ней сами нажимались, будто за ней сидел кто-то невидимый. Или Вы ей что-то отвечали на той же машинке, а она перебивала вас и вы отдергивали руки от неожиданного движения клавиатуры под пальцами.Компьютер был реально живой - он двигал "пальцами", такого сейчас нет.В 80-е годы появились мониторы. |
Пришел к выводу что проблема кроется где то в настройках самих проектов, потому что если создать готовый Hello World ANSI C Project, а код туда поставить свой - то все работает. Осталось за малым найти различия в настройках. Кстати, а кто какими средами и компиляторами пользуется, помимо MS Visual Studio?
|
Dev-C++. Только «пользуюсь» — это громко сказано. Я давно уже не программист. Так, применяю для помощи.
|
Цитата:
|
Насчет
Цитата:
Цитата:
Средства разработки выбирайте сами, исходя из своих целей и желаний. Для начала лучше научитесь писать в notepad и собирать вручную, чтобы потом не гадать где и что значит у нормальной IDE. А так, к примеру, Iska, пишет классные скрипты, а среда, возможно, не впечатлит :) |
Цитата:
в unix- подобнызх системах (где и родился "C") стартующая функция имеет вид Код:
int main(int argc, char **argv); Код:
int WinMain(HINSTANCE this, HINSTANCE prev. char *cmdline, int nshow); Убери в проекте Settings -> Tool Settings -> command или где-то там слова -Wl,-subsystem,windows http://stackoverflow.com/questions/7...gw-and-eclipse Но лучше создавай Empty C Project для MinGW и вручную добавляй файл main.c |
pva, спасибо, попробую. User001, отличия ищу, но пока времени из за работы было мало:)
|
Как бы стыдно не было это писать, но надо:) Кто бы за меня нажал Ctrl+S перед Build :blush2: на другом ноуте в Eclipse это делалось автоматом.
|
Время: 08:45. |
Время: 08:45.
© OSzone.net 2001-