Интересное из сети.

ecosolver

РадиоФилин & У.С. (С.А.Р.А) - . УГУ!
Скорее самому застрелиться, если:
-----
Сдача лабы "Эффект Холла":
- Что такое p-n переход?
- Превращение протона в нейтрон.
-----
.
Если попугай разбудит своим чириканьем злого пса, означает ли это,что попугай превратился в сторожевого пса?
(аналогия ситуации с бомбардировкой мишени протонами)
Нет конечно!
Но...незадачливому воришке с испугу может показаться именно это)
 

Arkad

Местный
Если попугай разбудит своим чириканьем злого пса, означает ли это,что попугай превратился в сторожевого пса?
(аналогия ситуации с бомбардировкой мишени протонами)
Нет конечно!
Но...незадачливому воришке с испугу может показаться именно это)
Попугая можно будет называть сторожевым, только если он трубит тревогу "по делу", а если просто чирикает, и не дает псу спать, то он просто "балабол".
Золотого петушка помните: Когда все спокойно - "Царствуй лежа на боку", а тревогу поднимал только при приближении врага.
 
Последнее редактирование:

Arkad

Местный
Скорее самому застрелиться, если:
Зачет по информатике:
Студент показывает конспект с текстом на Си:
- А, это что у вас тут: "#include ..."?
- Подключение библиотеки!
- Какой?
- Стандартной.
- Подключение к чему?
- К моей программе!
Диалог про "А, где у вас тут программа?" - опускаю.
 

ecosolver

РадиоФилин & У.С. (С.А.Р.А) - . УГУ!
Попугая можно будет называть сторожевым, только если он трубит тревогу "по делу", а если просто чирикает, и не дает псу спать, то он просто "балабол"
Вопрос не в этом - попугай не превратится в пса, ни в сторожевого,ни в какого-либо другого.
 

ecosolver

РадиоФилин & У.С. (С.А.Р.А) - . УГУ!
Зачет по информатике:
Студент показывает конспект с текстом на Си:
- А, это что у вас тут: "#include ..."?
- Подключение библиотеки!
- Какой?
- Стандартной.
- Подключение к чему?
- К моей программе!
Диалог про "А, где у вас тут программа?" - опускаю.
Не понял - #include просто так был написан без <***.h> или без "***.h"?

Если так, то итак ясно ,ято это такое - синтаксическая ошибка - компиляция прошла неуспешно.
 

Arkad

Местный
Не понял - #include просто так был написан без <***.h> или без "***.h"?

Если так, то итак ясно ,ято это такое - синтаксическая ошибка - компиляция прошла неуспешно.
Да, нет - все там было - что-то вроде stdio какого-то.
Вот еще один - дитя школьной информатики - При чем здесь синтаксическая ошибка, и компиляция!?
"#include ..." - не для компилятора!
Вот и они мне все в один голос - "include" - это же на Си!"
Переспросил два раза - "Что, в Си есть такое ключевое слово?".
Со школы вбили, что "include" - принадлежность языка Си, и предназначено для компилятора, но забыли разъяснить место компилятора в программировании.
 

ecosolver

РадиоФилин & У.С. (С.А.Р.А) - . УГУ!
Да, нет - все там было - что-то вроде stdio какого-то.
Вот еще один - дитя школьной информатики - При чем здесь синтаксическая ошибка, и компиляция!?
"#include ..." - не для компилятора!
Вот и они мне все в один голос - "include" - это же на Си!"
Переспросил два раза - "Что, в Си есть такое ключевое слово?".
Со школы вбили, что "include" - принадлежность языка Си, и предназначено для компилятора, но забыли разъяснить место компилятора в программировании.
Ладно сдаюсь.
Если include - не директива компилятора, тогда директива чего?
Транслятора?

В справочнике по Си написано буквально следующее:
Директива #include дает указание компилятору читать еще один исходный файл — в дополнение к тому файлу, в котором находится сама эта директива. Имя исходного файла должно быть заключено в двойные кавычки или в угловые скобки. Например, обе директивы
#include "stdio.h"
#include <stdio.h>
А как на самом деле?
 

Arkad

Местный
Ладно сдаюсь.
Если include - не директива компилятора, тогда директива чего?
Транслятора?

В справочнике по Си написано буквально следующее:

А как на самом деле?
Ликбез: (краткий)
Транслятор (с какого-то иностранного - переводчик) - автоматический (машинный, т.е. программа) переводчик с одного формального языка на другой.
Компилятор - транслятор с языка более высокого уровня на уровень ниже (как правило на язык Ассемблера). Напр - с Си на Асм.
-----
В родительском описании (у автора) языка Си описан механизм включения в исходный текст текста из других файлов (для удобства)..
Механизм был назван - Препроцессор, его команды не вошли в стандарт языка, но производители Компиляторов включают препроцессор в свои продукты по традиции, и можно считать, что препроцессор - полноправная часть языка Си (условно), и нужно понимать, что команды препроцессора не укладываются в синтаксис Си..
И все компиляторы (по традиции) со времен первого - DEC`овского строятся по единой "поточной" технологии (как принято в УНИХе (Юниксе): Компилятор состоит из группы программ - С0, С1, С2, С3, так, что выходной поток одной из них является входным для следующей.
Последовательность обработки исходного текста примерно следующая:
С0 - препроцессор (обрабатывает строки, начинающиеся с "#", все остальное - игнорирует),
С1 - синтаксический анализатор - только проверяет синтаксис Си, и сообщает об ошибках,
С2 - собственно компилятор с Си на метаязык,
С3 - компилятор с метаязыка на ассемблер,
С4 - С ассемблера на язык объектного модуля.
После этого всего в работу включается "Компановщик" - редактор связей, который собирает все потребные, и заявленные объектные модули (и их библиотеки) в одну прогу на языке загрузки (exe-файл).
-----
Вот теперь разберитесь, и скажите, как "#include" может вызвать синтаксическую ошибку?.
Не, конечно - у препроцессора есть своя диагностика, и он как все может выдать сообщение об ошибке, но только своих команд, а никак не синтаксиса Си..
 
Последнее редактирование:

ecosolver

РадиоФилин & У.С. (С.А.Р.А) - . УГУ!
Вот теперь разберитесь, и скажите, как "#include" может вызвать синтаксическую ошибку?.
Не, конечно - у препроцессора есть своя диагностика, и он как все может выдать сообщение об ошибке, но только своих команд, а никак не синтаксиса Си..
Я , возможно не так выразился, я банально о такой ситуации:
999.GIF
Ошибка "неизвестный идентификатор"...
Т.е. в свете того, что сказали вы , получается, что препроцессор не знает, чего от него хотят, потому он останавливает процесс преобразования кода в исполняемый файл, а сам по себе компилятор в этой ситуации честно дрыхнет - очередь до него не дошла)
 
Последнее редактирование:

Arkad

Местный
препроцессор останавливает процесс преобразования кода в исполняемый файл, а сам по себе компилятор в этой ситуации честно дрыхнет - очередь до него не дошла)
Препроцессор не может преобразовать что бы то ни было в исполняемый файл!
Почему все доморощенные программисты уверены, что если у них есть некий текст на Си (ворох операторов), и они скормят этот текст компьютеру, то компьютер немедленно примется исполнять выписанные операторы.
Ах, да! Никто же не сказал, что это всего-то "исходный текст на языке высокого уровня, а программа (то, что м.б. выполнено) пишется на совсем другом языке.
Никто из "насильников" не пишет исполняемые программы!
По уму программа - набор инструкций (команд) для исполнительного агрегата.
В компьютере исполнителем явл. процессор, и понятные ему команды пишутся двоичным кодом.
В кухне исполнитель - повар, и программа, понятная для него - рецепт, написанный в соотв. терминах.
-----
Про ошибку: По команде #include "koshka.h" препроцессор должен был переключить свой входной поток на указанный файл, и продолжить не далее по исходному тексту, а начать читать из указанного файла.
А, файла такого не существует! - препроцессор просто прекратил свою деятельность (как указано в настройках транслятора).
Ошибка - не синтаксическая! Синтаксис команд препроцессора - соблюден. Ошибка выполнения команды ввиду отсутствия указанного файла.
Хотя надо смотреть, как устроены настройки реакции на ошибку.
Если установлено "Стоп всем этапам в случае ошибки на любом этапе", то ошибка препроцессора тормознет все последующие этапы.
 
Последнее редактирование:

ecosolver

РадиоФилин & У.С. (С.А.Р.А) - . УГУ!
Препроцессор не может преобразовать что бы то ни было в исполняемый файл!
Хорошо, тогда ЧТО запускается после нажатия кнопки "Build"? - последовательность процессов С0-С4 (прямо,как 5 разных по размеру яиц, но судя по маркировке у препроцессора самые большие яйца)) ), ожидаемый конечный результат которой - исполняемый файл. Есть ли у этих процессов какое-то общее корректное название ?
Конечно же , я понимаю (#include <ок,_теперь_понимаю.h>), что препроцессор сам по себе не делает исполняемый файл, но он вправе испортить всю малину, прервав процесс, если где-то обломается) (примерно, как в жизни)

А так до меня дошло - это всё же ошибка времени выполнения - так как директива была понятной ( :) ) ,но невыполнимой.

ПС - пришла в голову забавная мысль. Если в исходном коде для компьютера боле-менее понятно, где директива, а где текст программы, то в "коде" для человека - нет.
Одна и та же фраза "приготовь мне что нибудь" может быть как вызовом конкретной функции (согласно которой жена выберет наиболее вкусные кусочки из холодильника (а при отсутствии таких в холодильнике - из магазина), вызовет из своей памяти наиболее популярный (согласно внутреннему рейтингу ) рецепт и отработает программу приготовления блюда по нему), либо директивой на подключение библиотеки "а_не_офигел_ли_ты_часом.h" (либо какой-то другой, я в женщинах разбираюсь еще хуже, чем в компах :) ).
В последнем случае видимой реакции на эту фразу разумеется не последует (либо на лице будет читаться ошибка времени выполнения, но когда голоден можно не заметить), за то на последующие фразы реакция будет неожиданной, и ...скорее всего неприятной, так как ими будут запускаться функции из этой библиотеки :)

И ,вы абсолютно правы, если данную ситуацию считать синтаксической ошибкой, то попытка отладить программу может закончиться... зависанием системы и ... легким коллапсом в голове программиста)
 
Последнее редактирование:

Arkad

Местный
Почему все доморощенные программисты уверены, что если у них есть некий текст на Си (ворох операторов), и они скормят этот текст компьютеру, то компьютер немедленно примется исполнять выписанные операторы.
В компьютере нет ничего, что могло бы исполнять операторы языка Си.
Единственный язык (из расхожих), программа на котором выполняется "как есть" - это Бейсик.
Давным-давно, еще на заре компьютерной эпохи, когда были т.н. "миникомпьютеры", программировать их приходилось в машинных кодах (двоичный код) - дело хлопотное, кропотливое, и результат - малоустойчив - малейшая ошибка (а, ошибиться в двоичном коде - "как пару пальцев об асфальт...") вела к катастрофическим последствиям (ракеты летели не туда, дорогие спутники чудили на орбите).
Был предложен способ - программировать на языке символьном (не двоичном) более высокого уровня, был предложен Бейсик.
Но, кто (что), будет выполять инструкции Бейсика (ведь процессор миникомпьютера умеет выпольнять только двоичные команды).
Кто переведет текстовую запись операторов Бейсика в двоичный код машинных команд?
Пошаманили с Бейсиком, и системой команд миникомпов, и "научили" процессор впрямую исполнять операторы языка.
Это был прорыв! Сей процесс - прямое исполнение операторов языка высокого уровня (без компиляции в машинный код) теперь называется "интерпретацией".
Из ныне существующих языков прямой интерпретации поддаются только Бейсик и Java
 

ecosolver

РадиоФилин & У.С. (С.А.Р.А) - . УГУ!
В компьютере нет ничего, что могло бы исполнять операторы языка Си.
Согласен. Сам я сразу уточнил - компьютер исполняет... исполняемый файл, но не программу на Си.
И ...человек ,подозреваю тоже. Сначала чел вдуплит то, что ему говорят ,что-то там для себя родит, и ...начнет исполнять)
 

Arkad

Местный
И ...человек ,подозреваю тоже. Сначала чел вдуплит то, что ему говорят ,что-то там для себя родит, и ...начнет исполнять)
Тут всплывает такое понятие - "внутренний язык" - это тот, на котором человек ведет внутренний диалог "сам с собой".
Часто же бывает - что-то услышал, про себя повторил, и тогда только запомнил или приступил к действиям?
Бывает, что внутренний язык отличается от того, на котором чел общается с внешним миром (говорит).
Был у меня период - два месяца "жил на английском языке" (в забугорье дело было), внутренний диалог - на русском (это не исправить), но однажды я поймал себя на том, что говорю сам с собой по английски! - наверное от того, что прежде чем "сформулировать мысль" на английском приходится ее долго проговаривать "про себя", подбирая слова..., и это вошло в привычку, Означает ли это, что английский язык стал мне родным?
Психологи утверждают, что они умеют определять национальность внутреннего языка любого человека!
И, при этом для любого чела внутренний язык и является родным - (английские тараканы общаются между собой на английском, а немецкие - на немецком) - какой простор для контрразведки!
 
Последнее редактирование:

ecosolver

РадиоФилин & У.С. (С.А.Р.А) - . УГУ!
Тут всплывает такое понятие - "внутренний язык" - это тот, на котором человек ведет внутренний диалог "сам с собой".
Часто же бывает - что-то услышал, про себя повторил, и тогда только запомнил или приступил к действиям?
Бывает, что внутренний язык отличается от того, на котором чел общается с внешним миром (говорит).
Был у меня период - два месяца "жил на английском языке" (в забугорье дело было), внутренний диалог - на русском (это не исправить), но однажды я поймал себя на том, что говорю сам с собой по английски! - наверное от того, что прежде чем "сформулировать мысль" на английском приходится ее долго проговаривать "про себя", подбирая слова..., и это вошло в привычку, Означает ли это, что английский язык стал мне родным?
Психологи утверждают, что они умеют определять национальность внутреннего языка любого человека!
И, при этом для любого чела внутренний язык и является родным - (английские тараканы общаются между собой на английском, а немецкие - на немецком) - какой простор для контрразведки!
Ну да - у процессора машинный язык, у человека - внтуренний - всё правильно)
А так, в принципе ничего не мешает реализовать любую команду или функцию аппаратно - тогда процессор сможет понимать язык высокого уровня (ну как вы привели пример с бейсиком). Вопрос ЗАЧЕМ ,но КАК не вопрос - на ПЛИС)
 

Arkad

Местный
в принципе ничего не мешает реализовать любую команду или функцию аппаратно - тогда процессор сможет понимать язык высокого уровня
Не получится.
Во первых - паяют "железо" и придумывают языки разные люди, и у тех и других есть масса ограничений от смежников.
И, во вторых - нужно хоть раз написать простенькую прогу на Си, и посмотреть как она выглядит на Асме, и убедиться, что программа (то, что м.б. выполнено процессором) не просто последовательность инструкций - это довольно запутанная конструкция из хитровыдубленных взаимосвязанных кусочков.
Архитектура современных ЭВМ подразумевает, что данные и команды хранятся в памяти вперемежку, и "тупой" подход - выполняй все подряд, последовательно с начала до "стоп" - не пройдет.
Процессор в паре с УУ (устройство управления) действительно заточен на выполнение последовательно всего с заданной ячейки памяти, и выполнив команду он автоматически переходит к выполнению команды в следующей ячейке.
Параллельно , с (перед) выполнением каждой команды (и для) процессор вычисляет реальные адреса операндов для тек. команды, выбирает данные из памяти, записывает в память результат
Когда команда выполнена проц вычисляет адрес следующей команды (это м.б непосредсвенно следующая за текущей, а м.б. где-то далеко в просторах памяти), и переходит к ее выполнению.
Просто выполнить то, что в памяти дальше - может не получиться - а, вдруг там расположились данные, а они выполнены быть не могут.
Результат выполненной команды нельзя записать в ячейку, где "живет" команда - что произойдет когда дело дойдет до выполнения этой команды!
Итого прога в машинных кодах - сложная взаимосвязанная мешанина из кодов (команд) и данных.
Вот для этого компиляторы и нужны - аккуратно все разместить последовательно в памяти так, чтобы процессор, работая по схеме, описанной выше ничего не "напорол".
 

ask

Местный
Воинская часть, первый подъём по тревоге после летнего отпуска у офицеров. Лейтенант запрыгивает в башню танка и кричит:
— Наливай! Тьфу, раздевай! Тьфу ты. Заводи!
 
Сверху