Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Wiiiiijjj
18 / 18 / 18
Регистрация: 25.08.2014
Сообщений: 186
#1

Как это работает? Я хочу спросить как работает C++ и где можно про него почитать - C++

11.10.2014, 14:57. Просмотров 1315. Ответов 16
Метки нет (Все метки)

Привет, котоны. Заранее благодарю. Это будет моих общих вопросов нить, т.к. создавать целую ветку для каждого нецелесообразно. Я хочу спросить как работает C++ и где можно про него почитать. Да, вопрос странный.

У меня просто возникают странные ощущения, когда я пишу код, который не могу понять как работает. Вроде и понятно, и нет.
Вот проект, вот он что-то считывает/вычисляет/выводит в командную строку. Но почему он это делает? Как происходит компиляция, на основе чего? У меня на компьютере .exe работет — на другом нет. Насколько мой код кроссплатформенен? Как работают все эти подключаемые мной библиотеки? Почему можно выводить как printf(), а можно как cout? Почему решили использовать в cout и cin побитовый сдвиг? Одно и тоже ли int a[] и int *a? Почему в условном операторе имеет место быть присваивание?
1
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.10.2014, 14:57
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как это работает? Я хочу спросить как работает C++ и где можно про него почитать (C++):

Где можно почитать про списки на C/C++?
Ну, вопрос, собственно, максимально отражен в теме: "Где можно почитать про...

Где можно почитать про списки на C++?
Подскажите пожалуйста или поделитесь полезной литературой) чтобы доступно и...

Подскажите пожалуйста где можно почитать про структуры
Подскажите пожалуйста где можно почитать про структуры Добавлено через 1...

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

Русификация.Работает-супер! Обьяснитте, как это работает?
#include <iostream> #include <conio.h> #include <windows.h> using...

Хочу понять как работает str.insert
Смотрел на разных форумах, разделах, много чего для меня непонятного. Помогите...

16
0x10
2554 / 1734 / 285
Регистрация: 24.11.2012
Сообщений: 4,361
11.10.2014, 15:18 #2
Лучший ответ Сообщение было отмечено MrGluck как решение

Решение

Некоторые вопросы сформулированы таким образом, что непонятно как на них отвечать. Так и просятся капитанские ответы, которые фактически ничего не дадут автору. Ну можно попробовать по порядку...
Цитата Сообщение от Wiiiiijjj Посмотреть сообщение
Я хочу спросить как работает C++ и где можно про него почитать
В книгах же.
Цитата Сообщение от Wiiiiijjj Посмотреть сообщение
У меня просто возникают странные ощущения, когда я пишу код, который не могу понять как работает.
Значит, не хватает базовых знаний. Продолжаем читать книги и практиковаться.
Цитата Сообщение от Wiiiiijjj Посмотреть сообщение
Вот проект, вот он что-то считывает/вычисляет/выводит в командную строку. Но почему он это делает?
Потому что именно это написано в исходнике.
Цитата Сообщение от Wiiiiijjj Посмотреть сообщение
Как происходит компиляция, на основе чего?
Программа на С++ транслируется в машинный код. Говоря так, я выкидываю практические все этапы компиляции. Общие сведения есть в любой книге по С++. Если интересует построение компиляторов - тоже есть спец книги.
Цитата Сообщение от Wiiiiijjj Посмотреть сообщение
У меня на компьютере .exe работет — на другом нет.
Например, потому что бинарь был слинкован с динамической библиотекой, которая отсутствует на целевой машине.
Цитата Сообщение от Wiiiiijjj Посмотреть сообщение
Насколько мой код кроссплатформенен?
Определяется самим кодом. Как минимум, использованием системных вызовов, специфичных для ОС/платформы.
Цитата Сообщение от Wiiiiijjj Посмотреть сообщение
Как работают все эти подключаемые мной библиотеки?
Какие "эти все" и какие аспекты функционирования интересуют? В любом случае, см в документацию.
Цитата Сообщение от Wiiiiijjj Посмотреть сообщение
Почему можно выводить как printf(), а можно как cout?
printf перекочевал в С++ из стандартной библиотеки языка Си. Объект std::cout - часть стандартной библиотеки С++.
Цитата Сообщение от Wiiiiijjj Посмотреть сообщение
Почему решили использовать в cout и cin побитовый сдвиг?
Разработчики библиотеки решили, что помещение в поток будет выглядеть наиболее семантично с использованием этого оператора.
Цитата Сообщение от Wiiiiijjj Посмотреть сообщение
Одно и тоже ли int a[] и int *a?
Смотря где.
Цитата Сообщение от Wiiiiijjj Посмотреть сообщение
Почему в условном операторе имеет место быть присваивание?
В условном операторе может присутствовать выражение, результат которого может быть неявно приведен к bool.
2
Wiiiiijjj
18 / 18 / 18
Регистрация: 25.08.2014
Сообщений: 186
11.10.2014, 15:31  [ТС] #3
Цитата Сообщение от 0x10 Посмотреть сообщение
>У меня на компьютере .exe работет — на другом нет.
Например, потому что бинарь был слинкован с динамической библиотекой, которая отсутствует на целевой машине.
Поподробнее.


Цитата Сообщение от 0x10 Посмотреть сообщение
>Насколько мой код кроссплатформенен?
Определяется самим кодом. Как минимум, использованием системных вызовов, специфичных для ОС/платформы.
Как же сделать кроссплатформенным?
0
0x10
2554 / 1734 / 285
Регистрация: 24.11.2012
Сообщений: 4,361
11.10.2014, 15:44 #4
Цитата Сообщение от Wiiiiijjj Посмотреть сообщение
Поподробнее.
На всякий случай: я не представляю почему в Вашем конкретном случае бинарь "не работает" на другой машине. Потому что недостаточно информации для диагностики. Просто в большинстве случаев на форуме народ собирает одни и те же грабли: линкуют программу с динамической рантайм библиотекой (грубо говоря, в бинарь помещается только ссылка на библиотеку). Статическая же линковка - полное включение всего кода библиотеки в результирующий исполняемый файл. Настраивается в параметрах проекта. Документация - http://msdn.microsoft.com/en-us/library/2kzt1wy3.aspx
Кто работает под виндой, скажет конкретнее и подробнее.

Добавлено через 1 минуту
Цитата Сообщение от Wiiiiijjj Посмотреть сообщение
Как же сделать кроссплатформенным?
Варианты:
1. Не использовать системные вызовы в своем коде. Функционал компенсировать библиотеками/фреймворками (stl, boost, Qt, POCO, etc)
2. Писать несколько вариантов одного и того же кода: под каждую платформу. Фактически библиотеки из первого пункта так и реализованы.
1
Wiiiiijjj
18 / 18 / 18
Регистрация: 25.08.2014
Сообщений: 186
11.10.2014, 15:53  [ТС] #5
Цитата Сообщение от 0x10 Посмотреть сообщение
Писать несколько вариантов одного и того же кода: под каждую платформу. Фактически библиотеки из первого пункта так и реализованы.
Т.е. если я статически отлинкую прогу — будут включены все библиотеки с вариантами под все платформы?


Да, и еще, мне интересно как именно работают самые стандартные вещи — как cout выводит данные в консоль, например?
0
0x10
2554 / 1734 / 285
Регистрация: 24.11.2012
Сообщений: 4,361
11.10.2014, 16:13 #6
Цитата Сообщение от Wiiiiijjj Посмотреть сообщение
Т.е. если я статически отлинкую прогу — будут включены все библиотеки с вариантами под все платформы?
Сейчас я говорю только о линковке рантайм библиотеки.
И одной кнопкой под все платформы вот так собрать не получится. Это сборка под конкретную целевую платформу, которая определяется компилятором. Для других платформ нужно собирать отдельно. Может измениться:
1. ОС. Как следствие, формат исполняемого файла, системные вызовы, разрядность.
2. Железо. Вместе с ним - набор интрукций процессора.

Цитата Сообщение от Wiiiiijjj Посмотреть сообщение
Да, и еще, мне интересно как именно работают самые стандартные вещи — как cout выводит данные в консоль, например?
На низком уровне там в любом случае будет системный вызов вывода данных в стандартный поток вывода.
1
taras atavin
4204 / 1763 / 212
Регистрация: 24.11.2009
Сообщений: 27,565
11.10.2014, 16:25 #7
Цитата Сообщение от Wiiiiijjj Посмотреть сообщение
Почему в условном операторе имеет место быть присваивание?
Покажи.

Добавлено через 4 минуты
Цитата Сообщение от Wiiiiijjj Посмотреть сообщение
Поподробнее.
Вообще то это тебе надо изъясняться подробнее.

Добавлено через 3 минуты
Цитата Сообщение от Wiiiiijjj Посмотреть сообщение
Т.е. если я статически отлинкую прогу — будут включены все библиотеки с вариантами под все платформы?
Нет. Если ты пристегнешь топорище к руке, то потащишь за собой все варианты молотков, пил, топоров, свёрел и даже станков?
0
Wiiiiijjj
18 / 18 / 18
Регистрация: 25.08.2014
Сообщений: 186
11.10.2014, 16:58  [ТС] #8
Цитата Сообщение от taras atavin Посмотреть сообщение
Покажи.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
using namespace std;
 
int main()
{
    int a = 0;
 
    if (a = 0)
        cout << "a = 0" << endl;
 
    if (a = a)
        cout << "a = a" << endl;
 
    if (a = 1)
        cout << "a = 1" << endl;
 
    if (a = a)
        cout << "a = a" << endl;
 
    return 0;
}
Цитата Сообщение от taras atavin Посмотреть сообщение
Нет. Если ты пристегнешь топорище к руке, то потащишь за собой все варианты молотков, пил, топоров, свёрел и даже станков?
Интересная аналогия. Как же происходит линковка? Все что ищется — связано с командной строкой и компиляцией в ней со всякими параметрами. Можно как-нибудь компилятор настроить из под среды? IDE — QtCreator.
0
taras atavin
4204 / 1763 / 212
Регистрация: 24.11.2009
Сообщений: 27,565
11.10.2014, 17:01 #9
Не правильно. Здесь должна быть ==, а не =.
C++
1
2
3
4
5
6
7
8
9
10
using namespace std;
 
int main()
{
 int a;
 std::cin>>a;
 if (a == 0) std::cout << "a = 0" << std::endl;
 if (a == 1) std::cout << "a = 1" << std::endl;
    return 0;
}
.

Добавлено через 29 секунд
Цитата Сообщение от Wiiiiijjj Посмотреть сообщение
Как же происходит линковка?
Читай специальную литературу.
0
Wiiiiijjj
18 / 18 / 18
Регистрация: 25.08.2014
Сообщений: 186
11.10.2014, 17:46  [ТС] #10
Да, такой вот еще вопрос.
В чем преимущество try..throw..catch от обычных условных конструкций?

Не по теме:

Цитата Сообщение от taras atavin Посмотреть сообщение
Не правильно
Правильно “неправильно”

0
Croessmah
++Ͻ
14146 / 8071 / 1512
Регистрация: 27.09.2012
Сообщений: 19,905
Записей в блоге: 3
Завершенные тесты: 1
11.10.2014, 17:47 #11
Цитата Сообщение от Wiiiiijjj Посмотреть сообщение
В чем преимущество try..throw..catch от обычных условных конструкций?
а в чем они похожи?
0
0x10
2554 / 1734 / 285
Регистрация: 24.11.2012
Сообщений: 4,361
11.10.2014, 17:51 #12
Цитата Сообщение от Wiiiiijjj Посмотреть сообщение
В чем преимущество try..throw..catch от обычных условных конструкций?
Это "слегка" разные вещи.
0
taras atavin
4204 / 1763 / 212
Регистрация: 24.11.2009
Сообщений: 27,565
11.10.2014, 17:55 #13
Цитата Сообщение от Wiiiiijjj Посмотреть сообщение
В чем преимущество try..throw..catch от обычных условных конструкций?
В том, что можно двумя операторами отловить ошибку времени исполнения по всему телу функции и компактно её обработать, а не раскидывать ифы где попало.
1
Wiiiiijjj
18 / 18 / 18
Регистрация: 25.08.2014
Сообщений: 186
11.10.2014, 18:07  [ТС] #14
А я правильно понимаю, если в блоке try случается, например, деление на ноль, автоматически генерируется код ошибки?
0
0x10
2554 / 1734 / 285
Регистрация: 24.11.2012
Сообщений: 4,361
11.10.2014, 18:13 #15
Цитата Сообщение от Wiiiiijjj Посмотреть сообщение
В чем преимущество try..throw..catch от обычных условных конструкций?
Деление на ноль - источник аппаратного прерывания, а не программного исключения.
0
Wiiiiijjj
18 / 18 / 18
Регистрация: 25.08.2014
Сообщений: 186
11.10.2014, 18:40  [ТС] #16
А какие-нибудь ошибки генерятся сами?
0
0x10
2554 / 1734 / 285
Регистрация: 24.11.2012
Сообщений: 4,361
11.10.2014, 18:42 #17
Цитата Сообщение от Wiiiiijjj Посмотреть сообщение
А какие-нибудь ошибки генерятся сами?

Не по теме:

Ошибки обычно генерят программисты, когда пишут код. Потом исправляют эти ошибки и генерят новые.


Магии нет, ничто не происходит само по себе. Если где-то вылетает исключение - значит, оно сгенерено.
1
11.10.2014, 18:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.10.2014, 18:42
Привет! Вот еще темы с решениями:

Где можно узнать про то как строить блок схемы по классам?
В инете искал, так и не сумел найти как строить блок-схемы по классам сейчас...

Как это работает?
#include &lt;iostream&gt; int *fun() { int a = 5; return &amp;a; } int main() {...

Как это работает?
Читаю я кое какой &quot;учебник&quot;, и в нём появился такой вот кусок кода int input...

Как это работает?
Доброго времени суток. Граждане программисты, подскажите пожалуйста как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru