UAVpilot писал(а):Rafiq писал(а):Но я то просто пишу
а остальное "дописывает" препроцессор и компилятор.

Вот ты просто начинаешь писать программу с функции main(), а кто эту функцию вызывает на испольнение, святой дух чтоли?
Что есть чистый C? Я например могу писать объектноориентированные программы на обычном C (библиотеки X11 тому пример), а могу писать программы на C++ не применяя объектов/классов.
Язык C - это своего рода макроассемблер высокого уровня. И относится к нему надо именно как к ассемблеру, т.е. с аналогичными преосторожностями, ибо на С что напишешь, то и получишь.
Понятное дело, что в общем случае ОС должна загрузить в память исполняемый файл, да и в нем первым вызывается код зависящий от платформы, который встраивается в исполняемый файл линкером, и в конце этого кода есть вызов
Но как я и сказал, мне как прикладному программисту важно то, что пишу я, а что там добавит к моему коду препроцессор или линкер, или каким образом загрузчик размещает мою программу в памяти и передает ей управление, меня в подавляющем большинстве случаев не интересует. И даже когда я пишу модуль ядра, меня интересует интерфейс с ядром, а не то, что реально делает система, когда я даю команду insmod. Мне важно знать только то, что при этом будет вызвана функция init() моего модуля.
Я не спорю, и на простом C можно писать ОО программы, но лучше все таки делать это на С++, который скрывает реализацию. Но поскольку родные библиотеки X11 написаны на C, тут уж деваться некуда. Точно так же и на C++ можно вообще не использовать классы, ведь функция main() не обязана быть методом класса, как это есть в Java или C#.
Насчет предосторожностей согласен.
P.S. На втором курсе у нас был Ассемблер, и это казалось круто - на самом же деле, даже для AVR я пишу на C Так проще. Да и библиотек готовых полно, кои я юзаю при первой возможности (ломает тратить время на изобретение велосипеда, да еще и баги в этом велосипеде отлавливать), повторное использование кода - великая вещь. Как думаешь, много ли было бы написано программ, скажем, для IBM PC, если бы каждому программисту в каждой своей программе приходилось бы иметь дело с регистрами видеоадаптера или контроллера гибких/жестких дисков?

Но для контроллеров знать Ассемблер нужно для понимания архитектуры проца, да и низкоуровневая оптимизация может потребоваться.
P.P.S. В принципе, и под Виндой и под Юниксами можно писать на Асме, и это ненамного сложнее, чем на C, поскольку все сводится в конечном итоге к таким же как и в С вызовам API, но все же Асм тут - просто изврат
