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

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

11.10.2014, 14:57. Просмотров 1848. Ответов 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 минуту Структуры – это...

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

Где можно почитать о том, как устроена Windows? Как она работает и т.д.?
Есть книги такие?

16
0x10
2643 / 1796 / 299
Регистрация: 24.11.2012
Сообщений: 4,459
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
2643 / 1796 / 299
Регистрация: 24.11.2012
Сообщений: 4,459
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
11.10.2014, 15:44
Wiiiiijjj
18 / 18 / 18
Регистрация: 25.08.2014
Сообщений: 186
11.10.2014, 15:53  [ТС] 5
Цитата Сообщение от 0x10 Посмотреть сообщение
Писать несколько вариантов одного и того же кода: под каждую платформу. Фактически библиотеки из первого пункта так и реализованы.
Т.е. если я статически отлинкую прогу — будут включены все библиотеки с вариантами под все платформы?


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

Цитата Сообщение от Wiiiiijjj Посмотреть сообщение
Да, и еще, мне интересно как именно работают самые стандартные вещи — как cout выводит данные в консоль, например?
На низком уровне там в любом случае будет системный вызов вывода данных в стандартный поток вывода.
1
taras atavin
4207 / 1774 / 211
Регистрация: 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
4207 / 1774 / 211
Регистрация: 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
++Ͻ
15317 / 8692 / 1659
Регистрация: 27.09.2012
Сообщений: 21,423
Записей в блоге: 2
Завершенные тесты: 2
11.10.2014, 17:47 11
Цитата Сообщение от Wiiiiijjj Посмотреть сообщение
В чем преимущество try..throw..catch от обычных условных конструкций?
а в чем они похожи?
0
0x10
2643 / 1796 / 299
Регистрация: 24.11.2012
Сообщений: 4,459
11.10.2014, 17:51 12
Цитата Сообщение от Wiiiiijjj Посмотреть сообщение
В чем преимущество try..throw..catch от обычных условных конструкций?
Это "слегка" разные вещи.
0
taras atavin
4207 / 1774 / 211
Регистрация: 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
2643 / 1796 / 299
Регистрация: 24.11.2012
Сообщений: 4,459
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
2643 / 1796 / 299
Регистрация: 24.11.2012
Сообщений: 4,459
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

Что такое T4 script и где про него можно почитать?
В правильную ветку форума написал или нет не знаю. Но разобраться в этом вопросе для меня важно....

Хочу узнать про то как работает компютер...
В этом деле полный чайник, но хочу узнать как работает компютер (операционная система, шина и...

Как это назвать или где почитать как это сделать?
Вот как выглядит моя цель - http://cs623921.vk.me/v623921477/38005/2W46UJsY3nM.jpg При нажатии на...


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

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

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