19 / 19 / 18
Регистрация: 25.08.2014
Сообщений: 186
|
|
1 | |
Как это работает? Я хочу спросить как работает C++ и где можно про него почитать11.10.2014, 14:57. Просмотров 3013. Ответов 16
Метки нет Все метки)
(
Привет, котоны. Заранее благодарю. Это будет моих общих вопросов нить, т.к. создавать целую ветку для каждого нецелесообразно. Я хочу спросить как работает C++ и где можно про него почитать. Да, вопрос странный.
У меня просто возникают странные ощущения, когда я пишу код, который не могу понять как работает. Вроде и понятно, и нет. Вот проект, вот он что-то считывает/вычисляет/выводит в командную строку. Но почему он это делает? Как происходит компиляция, на основе чего? У меня на компьютере .exe работет — на другом нет. Насколько мой код кроссплатформенен? Как работают все эти подключаемые мной библиотеки? Почему можно выводить как printf(), а можно как cout? Почему решили использовать в cout и cin побитовый сдвиг? Одно и тоже ли int a[] и int *a? Почему в условном операторе имеет место быть присваивание?
1
|
|
11.10.2014, 14:57 | |
Где можно почитать про списки на C++?
Подскажите пожалуйста где можно почитать про структуры Посоветуйте где можно подробнее почитать про использование указателей на функциях |
|
3239 / 2047 / 350
Регистрация: 24.11.2012
Сообщений: 4,897
|
|
11.10.2014, 15:18 | 2 |
![]() Решение
Некоторые вопросы сформулированы таким образом, что непонятно как на них отвечать. Так и просятся капитанские ответы, которые фактически ничего не дадут автору. Ну можно попробовать по порядку...
В книгах же. Значит, не хватает базовых знаний. Продолжаем читать книги и практиковаться. Потому что именно это написано в исходнике. Программа на С++ транслируется в машинный код. Говоря так, я выкидываю практические все этапы компиляции. Общие сведения есть в любой книге по С++. Если интересует построение компиляторов - тоже есть спец книги. Например, потому что бинарь был слинкован с динамической библиотекой, которая отсутствует на целевой машине. Определяется самим кодом. Как минимум, использованием системных вызовов, специфичных для ОС/платформы. Какие "эти все" и какие аспекты функционирования интересуют? В любом случае, см в документацию. printf перекочевал в С++ из стандартной библиотеки языка Си. Объект std::cout - часть стандартной библиотеки С++. Разработчики библиотеки решили, что помещение в поток будет выглядеть наиболее семантично с использованием этого оператора. Смотря где. В условном операторе может присутствовать выражение, результат которого может быть неявно приведен к bool.
2
|
19 / 19 / 18
Регистрация: 25.08.2014
Сообщений: 186
|
|
11.10.2014, 15:31 [ТС] | 3 |
0
|
3239 / 2047 / 350
Регистрация: 24.11.2012
Сообщений: 4,897
|
|
11.10.2014, 15:44 | 4 |
На всякий случай: я не представляю почему в Вашем конкретном случае бинарь "не работает" на другой машине. Потому что недостаточно информации для диагностики. Просто в большинстве случаев на форуме народ собирает одни и те же грабли: линкуют программу с динамической рантайм библиотекой (грубо говоря, в бинарь помещается только ссылка на библиотеку). Статическая же линковка - полное включение всего кода библиотеки в результирующий исполняемый файл. Настраивается в параметрах проекта. Документация - http://msdn.microsoft.com/en-u... t1wy3.aspx
Кто работает под виндой, скажет конкретнее и подробнее. Добавлено через 1 минуту Варианты: 1. Не использовать системные вызовы в своем коде. Функционал компенсировать библиотеками/фреймворками (stl, boost, Qt, POCO, etc) 2. Писать несколько вариантов одного и того же кода: под каждую платформу. Фактически библиотеки из первого пункта так и реализованы.
1
|
19 / 19 / 18
Регистрация: 25.08.2014
Сообщений: 186
|
|
11.10.2014, 15:53 [ТС] | 5 |
Т.е. если я статически отлинкую прогу — будут включены все библиотеки с вариантами под все платформы?
Да, и еще, мне интересно как именно работают самые стандартные вещи — как cout выводит данные в консоль, например?
0
|
3239 / 2047 / 350
Регистрация: 24.11.2012
Сообщений: 4,897
|
|
11.10.2014, 16:13 | 6 |
Сейчас я говорю только о линковке рантайм библиотеки.
И одной кнопкой под все платформы вот так собрать не получится. Это сборка под конкретную целевую платформу, которая определяется компилятором. Для других платформ нужно собирать отдельно. Может измениться: 1. ОС. Как следствие, формат исполняемого файла, системные вызовы, разрядность. 2. Железо. Вместе с ним - набор интрукций процессора. На низком уровне там в любом случае будет системный вызов вывода данных в стандартный поток вывода.
1
|
4197 / 1790 / 211
Регистрация: 24.11.2009
Сообщений: 27,563
|
|
11.10.2014, 16:25 | 7 |
Покажи.
Добавлено через 4 минуты Вообще то это тебе надо изъясняться подробнее. Добавлено через 3 минуты Нет. Если ты пристегнешь топорище к руке, то потащишь за собой все варианты молотков, пил, топоров, свёрел и даже станков?
0
|
19 / 19 / 18
Регистрация: 25.08.2014
Сообщений: 186
|
||||||
11.10.2014, 16:58 [ТС] | 8 | |||||
0
|
4197 / 1790 / 211
Регистрация: 24.11.2009
Сообщений: 27,563
|
||||||
11.10.2014, 17:01 | 9 | |||||
Не правильно. Здесь должна быть ==, а не =.
Добавлено через 29 секунд Читай специальную литературу.
0
|
19 / 19 / 18
Регистрация: 25.08.2014
Сообщений: 186
|
|
11.10.2014, 17:46 [ТС] | 10 |
Да, такой вот еще вопрос.
В чем преимущество try..throw..catch от обычных условных конструкций?
0
|
3239 / 2047 / 350
Регистрация: 24.11.2012
Сообщений: 4,897
|
|
11.10.2014, 17:51 | 12 |
0
|
4197 / 1790 / 211
Регистрация: 24.11.2009
Сообщений: 27,563
|
|
11.10.2014, 17:55 | 13 |
В том, что можно двумя операторами отловить ошибку времени исполнения по всему телу функции и компактно её обработать, а не раскидывать ифы где попало.
1
|
19 / 19 / 18
Регистрация: 25.08.2014
Сообщений: 186
|
|
11.10.2014, 18:07 [ТС] | 14 |
А я правильно понимаю, если в блоке try случается, например, деление на ноль, автоматически генерируется код ошибки?
0
|
3239 / 2047 / 350
Регистрация: 24.11.2012
Сообщений: 4,897
|
|
11.10.2014, 18:13 | 15 |
Деление на ноль - источник аппаратного прерывания, а не программного исключения.
0
|
19 / 19 / 18
Регистрация: 25.08.2014
Сообщений: 186
|
|
11.10.2014, 18:40 [ТС] | 16 |
А какие-нибудь ошибки генерятся сами?
0
|
3239 / 2047 / 350
Регистрация: 24.11.2012
Сообщений: 4,897
|
|
11.10.2014, 18:42 | 17 |
Не по теме: Ошибки обычно генерят программисты, когда пишут код. Потом исправляют эти ошибки и генерят новые. Магии нет, ничто не происходит само по себе. Если где-то вылетает исключение - значит, оно сгенерено.
1
|
11.10.2014, 18:42 | |
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь. Где можно почитать о том, как устроена Windows? Как она работает и т.д.? Что такое T4 script и где про него можно почитать? Хочу узнать про то как работает компютер...
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |