Re[4]: Hello, World!
От: Deeman  
Дата: 30.06.10 19:46
Оценка:
Здравствуйте, Vamp, Вы писали:

D>>Спасибо! Становится немного понятнее и уже интереснее.))

V>Ок. Тебе понятнее.
V>Тогда вот тебе вопрос для размышления.

V>
V>howthisworks.exe > file
V>

V>Эта команда запустит howthisworks.exe и, в случае использования print, вместо консоли сохранит текст в файл file.
V>Вопрос:
V>1. При использовании WriteConsoleA это поведение сохранится?
V>2. Объясни, почему.

Понятия не имею. Но предполагаю, что pintf, будучи более сложной функцией, может "адаптироваться" и выводить текст не только в файл, но и ещё куда-нибуть, в зависимости от того, чего нужно пользователю. В отличии от WriteConsoleA, которая всегда выполняет одно и то же действие.
Re[5]: Hello, World!
От: yozhik89 Украина  
Дата: 30.06.10 22:59
Оценка:
Здравствуйте, Deeman! На мой взгляд, Вы немножко не туда зашли. Если вы только начинаете программировать, и пишите программы на уровне Hello, world, то по своему опыту могу Вам посоветовать не лезть покаместь в реализации стандартных функций, а для начала научитесь нормально ими пользоваться. И читать Рихтера Вам пока еще очень рано, так что не забивайте себе етим голову. Избыток информации — ето так же плохо, как и ее недостаток.
Итак, что я могу Вам посоветовать:

1. Разберитесь, что нужно для минимально работающей программы.
2. Постепенно разберайтесь со всеми констукциями языка, изучите цыклы, указатели, функции и т.д. Советую Подбельского почитать Язык Си++, Дейтел — Как программировать на Си++ и выполнять ВСЕ упражнения, без практики никуда!
3. После всего етого уже можно начинать читать Рихтера.

Что еще могу добавить, так ето то, что неважно на каком языке ты будешь программировать — изучение нового языка, после того как ты знаешь хорошо один из них и принцыпы действия ето одна неделя — не больше, самое главное библиотека под етот язык! Так что не углубляйся чрезмерно в ети тонкости, смотри на картину в целом, а не на конкретные пиксели!
Извинити за мой русский:)
Re: Hello, World!
От: Pzz Россия https://github.com/alexpevzner
Дата: 01.07.10 00:20
Оценка:
Здравствуйте, Deeman, Вы писали:

D>Существует ли решение? В какую сторону искать? Как, чёрт побери, конкретно работает функция printf()?


Как бы не работала внутри себя функция printf(), в конечном итоге она должна сказать операционной системе, "выведи, пожалуйста, строку "Hello, World!" туда, где у тебя консоль припаяна". Проблема в том, что в Си нет встроенных средств сказать что-либо операционной системе. Поэтому на чистом Си, без использования библиотек, сделать этого нельзя.

В самих же библиотеках для переговоров с операционной системой используется либо ассемблер, либо нестандартные расширения Си (например, позволяющие воткнуть пару ассемблерных команд в середину сишной функции).
Re[4]: Поросята в краске
От: Micht  
Дата: 01.07.10 08:43
Оценка:
Здравствуйте, Vamp, Вы писали:

V>1. При использовании WriteConsoleA это поведение сохранится?

V>2. Объясни, почему.

Мне кажется, должно сохраниться, т.к. задано перенаправление вывода из консоли в файл, а этим делом должна рулить ось...
Поправьте, плз, если не прав.
Re[9]: Hello, World!
От: carpenter СССР  
Дата: 01.07.10 10:11
Оценка:
Здравствуйте, Deeman, Вы писали:

D>AlexGin, Вы писали:


AG>>мы имеем черный ящик


D>Я хочу знать, как работает чёрный ящик. Я не собираюсь писать его заново, я хочу знать, как он работает, потому что чёрный цвет меня пугает. Это, знаете ли, психологическое — если перед тобой неизвестность, ты её боишься. А известность тебя мотивирует.



желание похвальное ... но меня например мотивирует только неизвестность .


ну а если по делу — стоит посмотреть чтонибудь типа ассембелер под виндовс подсистемы ввода вывода ,
ну или как советовали — под отладчиком пройтись ... но эт тоже надо немного асм знать
Re[13]: Hello, World!
От: carpenter СССР  
Дата: 01.07.10 10:14
Оценка:
Здравствуйте, Deeman, Вы писали:

все правильно — не слушай их
— только поняв как это работает — поймешь , что эти знания на фиг не нужны .... но и карман не тянут
... и иногда даже и пригождаются

... когда то давно я тоже стремился проследить выполнение программы от кода до пробегания электрона по ноге процессора
Re[2]: Hello, World!
От: Deeman  
Дата: 01.07.10 10:15
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Как бы не работала внутри себя функция printf(), в конечном итоге она должна сказать операционной системе, "выведи, пожалуйста, строку "Hello, World!" туда, где у тебя консоль припаяна". Проблема в том, что в Си нет встроенных средств сказать что-либо операционной системе.


Как это? А как же мне обращаться к dll-кам? Неужто в С++ нет для этого встроенных средств?
Re[13]: Hello, World!
От: carpenter СССР  
Дата: 01.07.10 10:17
Оценка: 3 (1)
Здравствуйте, Deeman, Вы писали:

и еще — погугли — "real hello world" — думаю будет интересно
Re[6]: Hello, World!
От: Deeman  
Дата: 01.07.10 10:25
Оценка:
Здравствуйте, yozhik89, Вы писали:

Y>Здравствуйте, Deeman! На мой взгляд, Вы немножко не туда зашли. Если вы только начинаете программировать, и пишите программы на уровне Hello, world, то по своему опыту могу Вам посоветовать не лезть покаместь в реализации стандартных функций, а для начала научитесь нормально ими пользоваться.


Дык я как раз и хотел представить картину в целом. Мне было известно, что операционная система управляет "железом", операциями ввода-вывода. Мне так же было известно, что написание любой программы всегда частично является системным программированием, так как в любом случае программе приходится общаться с операционной системой (получать данные с внешнего мира и выводить туда результаты программа без ОС не способна (я знаю, что это очень спорное заявляение)). И из этого выходит, что любой язык должен иметь в себе конструкции для взаимодействия с исполняющей средой, то есть ОС. Пока LuciferSaratov не показал мне пример использования этих конструкций, я не знал, что стандартные библиотечные функции являются "надстройкой" к элементарным функциям обращения к внешнему миру.
Re[3]: Hello, World!
От: Pzz Россия https://github.com/alexpevzner
Дата: 01.07.10 10:26
Оценка:
Здравствуйте, Deeman, Вы писали:

Pzz>>Как бы не работала внутри себя функция printf(), в конечном итоге она должна сказать операционной системе, "выведи, пожалуйста, строку "Hello, World!" туда, где у тебя консоль припаяна". Проблема в том, что в Си нет встроенных средств сказать что-либо операционной системе.


D>Как это? А как же мне обращаться к dll-кам? Неужто в С++ нет для этого встроенных средств?


1) И как же в C++ называются встроенные средства для обращения к dll-кам? 2) Какое отношение обращение к dll-кам имеет к решению задачи "сказать что-либо операционной системе"?
Re[14]: Hello, World!
От: Deeman  
Дата: 01.07.10 10:27
Оценка:
Здравствуйте, carpenter, Вы писали:

C>Здравствуйте, Deeman, Вы писали:


C>и еще — погугли — "real hello world" — думаю будет интересно


Вот это круто, спасибо.
Re[4]: Hello, World!
От: Deeman  
Дата: 01.07.10 10:39
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>1) И как же в C++ называются встроенные средства для обращения к dll-кам? 2) Какое отношение обращение к dll-кам имеет к решению задачи "сказать что-либо операционной системе"?


1) Я полагаю примерно так, как написано вот здесь: http://wm-help.net/books-online/print-page/59464/59464-12.html

...при компиляции приведенного выше кода MYLIBAPI за счет заголовочного файла MyLib.h будет определен как _declspec (dllimport). Встречая такой модификатор перед именем переменной, функции или С++-класса, компилятор понимает, что данный идентификатор импортируется из какого-то DLL-модуля


2) Опять же, прибегну к цитате.))

Динамически подключаемые библиотеки (dynamic-link libraries, DLL) — краеугольный камень операционной системы Windows, начиная с самой первой ec версии. В DLL содержатся все функции Windows API. Три самые важные DLL: Kernel32.dll (управление памятью, процессами и потоками), User32.dll (поддержка пользовательского интерфейса, в том числе функции, связанные с созданием окон и передачей сообщений) и GDI32.dll (графика и вывод текста).

Re[5]: Hello, World!
От: Pzz Россия https://github.com/alexpevzner
Дата: 01.07.10 10:47
Оценка:
Здравствуйте, Deeman, Вы писали:

D>

...при компиляции приведенного выше кода MYLIBAPI за счет заголовочного файла MyLib.h будет определен как _declspec (dllimport). Встречая такой модификатор перед именем переменной, функции или С++-класса, компилятор понимает, что данный идентификатор импортируется из какого-то DLL-модуля


Это не встроенное средство C++, а нестандартное расширение языка, специфическое для данной платформы.

D>

D>Динамически подключаемые библиотеки (dynamic-link libraries, DLL) — краеугольный камень операционной системы Windows, начиная с самой первой ec версии. В DLL содержатся все функции Windows API. Три самые важные DLL: Kernel32.dll (управление памятью, процессами и потоками), User32.dll (поддержка пользовательского интерфейса, в том числе функции, связанные с созданием окон и передачей сообщений) и GDI32.dll (графика и вывод текста).


А DLL пишут боги на волшебных божественных языках программирования?

Топикстартер, кстати, спросил, как напечатать слово без внешних библиотек. DLL как раз является внешней библиотекой
Re[6]: Hello, World!
От: Guard_h4s Россия  
Дата: 01.07.10 11:01
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Топикстартер, кстати, спросил, как напечатать слово без внешних библиотек.

В рамках защищенного режима — никак) любое действие рано или поздно приведет к системному вызову(внешняя библиотека).
Re[6]: Hello, World!
От: Deeman  
Дата: 01.07.10 11:07
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Это не встроенное средство C++, а нестандартное расширение языка, специфическое для данной платформы.


Вы придираетесь.))


D>>

D>>Динамически подключаемые библиотеки (dynamic-link libraries, DLL) — краеугольный камень операционной системы Windows, начиная с самой первой ec версии. В DLL содержатся все функции Windows API. Три самые важные DLL: Kernel32.dll (управление памятью, процессами и потоками), User32.dll (поддержка пользовательского интерфейса, в том числе функции, связанные с созданием окон и передачей сообщений) и GDI32.dll (графика и вывод текста).


Pzz>А DLL пишут боги на волшебных божественных языках программирования?


Ну, мне казалось, что фундаментальные объекты операционной системы пишут на ассемблере, нет?


Pzz>Топикстартер, кстати, спросил, как напечатать слово без внешних библиотек. DLL как раз является внешней библиотекой


Под библиотеками топикстартер имел в виду заголовочные файлы .h, включаемые в код директивой #include.
Re[7]: Hello, World!
От: Pzz Россия https://github.com/alexpevzner
Дата: 01.07.10 11:31
Оценка:
Здравствуйте, Deeman, Вы писали:

Pzz>>Это не встроенное средство C++, а нестандартное расширение языка, специфическое для данной платформы.


D>Вы придираетесь.))


Отнюдь.

Pzz>>А DLL пишут боги на волшебных божественных языках программирования?


D>Ну, мне казалось, что фундаментальные объекты операционной системы пишут на ассемблере, нет?


Нет. Почти все пишут на Си/С++. Но при этом если надо из user space позвать ядро, используют переходнички, написанные на ассемблере или с использованием нестандартных расширений Си.

Pzz>>Топикстартер, кстати, спросил, как напечатать слово без внешних библиотек. DLL как раз является внешней библиотекой


D>Под библиотеками топикстартер имел в виду заголовочные файлы .h, включаемые в код директивой #include.


Ну, он просто не знал некоторых деталей
Re: Hello, World!
От: GhostCoders Россия  
Дата: 01.07.10 14:42
Оценка:
Здравствуйте, Deeman, Вы писали:

D>Друзья, тыкните новичка носом в ключевые слова для поиска!

D>Изучаю С++ и по ходу обучения появилось желание постичь фундаментальные основы. Желание сформулировалось задачу следущего содержания:
D>"Написать минимальную программу, выводящую в командной строке "Hello, World!", не используя директив #include". (то есть вообще никаких сторонних библиотек, один на один с компилятором и один файл .срр).
D>Существует ли решение? В какую сторону искать? Как, чёрт побери, конкретно работает функция printf()?

Решения этой задачи не существует.

Вообще на голом C или C++ нет способа вывести строчку "Hello, World!" на экран.

Любое решение как или иначе будет или использование внешнего модуля или библиотеки, или использование ассемблера.
Третий Рим должен пасть!
Re[2]: Hello, World!
От: Vamp Россия  
Дата: 01.07.10 14:48
Оценка:
GC>Любое решение как или иначе будет или использование внешнего модуля или библиотеки, или использование ассемблера.
Не обязательно. В незащищенных режимах вполне можно вывести строку, непосредственно обращаясь к видеопамяти. Для этого не нужен ассемблер.
Да здравствует мыло душистое и веревка пушистая.
Re[3]: Hello, World!
От: GhostCoders Россия  
Дата: 01.07.10 14:53
Оценка:
Здравствуйте, Vamp, Вы писали:

GC>>Любое решение как или иначе будет или использование внешнего модуля или библиотеки, или использование ассемблера.

V>Не обязательно. В незащищенных режимах вполне можно вывести строку, непосредственно обращаясь к видеопамяти. Для этого не нужен ассемблер.

Но это решение не будет работать на всех платформах, там где видеопамять начинается с другого адреса например.
Вы привели только частное решение.
Третий Рим должен пасть!
Re[4]: Hello, World!
От: Vamp Россия  
Дата: 01.07.10 20:59
Оценка:
GC>Но это решение не будет работать на всех платформах, там где видеопамять начинается с другого адреса например.
Я просто опровергнул квантор всеобщности ("любое решение").
Да здравствует мыло душистое и веревка пушистая.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.