Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Wiiiiijjj
17 / 17 / 6
Регистрация: 25.08.2014
Сообщений: 186
#1

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

11.10.2014, 14:57. Просмотров 1125. Ответов 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++
Ну, вопрос, собственно, максимально отражен в теме: "Где можно почитать про списки на C/C++?" Хочу поподробнее разобраться в этой теме. ...

Где можно почитать про списки на C++? - C++
Подскажите пожалуйста или поделитесь полезной литературой) чтобы доступно и понятно было) Заранее огромное вам спасибо:)

Подскажите пожалуйста где можно почитать про структуры - C++
Подскажите пожалуйста где можно почитать про структуры Добавлено через 1 минуту Структуры – это составные типы данных, построенные с...

Русификация.Работает-супер! Обьяснитте, как это работает? - C++
#include <iostream> #include <conio.h> #include <windows.h> using namespace std; char* Rus(const char* text); int main () ...

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

Как это работает? - C++
#include <iostream> #include <cstring> using namespace std; int main() { char* s=new char; ...

16
0x10
2512 / 1690 / 255
Регистрация: 24.11.2012
Сообщений: 4,237
11.10.2014, 15:18 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Некоторые вопросы сформулированы таким образом, что непонятно как на них отвечать. Так и просятся капитанские ответы, которые фактически ничего не дадут автору. Ну можно попробовать по порядку...
Цитата Сообщение от 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
17 / 17 / 6
Регистрация: 25.08.2014
Сообщений: 186
11.10.2014, 15:31  [ТС] #3
Цитата Сообщение от 0x10 Посмотреть сообщение
>У меня на компьютере .exe работет — на другом нет.
Например, потому что бинарь был слинкован с динамической библиотекой, которая отсутствует на целевой машине.
Поподробнее.


Цитата Сообщение от 0x10 Посмотреть сообщение
>Насколько мой код кроссплатформенен?
Определяется самим кодом. Как минимум, использованием системных вызовов, специфичных для ОС/платформы.
Как же сделать кроссплатформенным?
0
0x10
2512 / 1690 / 255
Регистрация: 24.11.2012
Сообщений: 4,237
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
17 / 17 / 6
Регистрация: 25.08.2014
Сообщений: 186
11.10.2014, 15:53  [ТС] #5
Цитата Сообщение от 0x10 Посмотреть сообщение
Писать несколько вариантов одного и того же кода: под каждую платформу. Фактически библиотеки из первого пункта так и реализованы.
Т.е. если я статически отлинкую прогу — будут включены все библиотеки с вариантами под все платформы?


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

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

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

Добавлено через 3 минуты
Цитата Сообщение от Wiiiiijjj Посмотреть сообщение
Т.е. если я статически отлинкую прогу — будут включены все библиотеки с вариантами под все платформы?
Нет. Если ты пристегнешь топорище к руке, то потащишь за собой все варианты молотков, пил, топоров, свёрел и даже станков?
0
Wiiiiijjj
17 / 17 / 6
Регистрация: 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
3571 / 1755 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
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
17 / 17 / 6
Регистрация: 25.08.2014
Сообщений: 186
11.10.2014, 17:46  [ТС] #10
Да, такой вот еще вопрос.
В чем преимущество try..throw..catch от обычных условных конструкций?

Не по теме:

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

0
Croessmah
Ушел
Эксперт CЭксперт С++
13565 / 7716 / 873
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
11.10.2014, 17:47 #11
Цитата Сообщение от Wiiiiijjj Посмотреть сообщение
В чем преимущество try..throw..catch от обычных условных конструкций?
а в чем они похожи?
0
0x10
2512 / 1690 / 255
Регистрация: 24.11.2012
Сообщений: 4,237
11.10.2014, 17:51 #12
Цитата Сообщение от Wiiiiijjj Посмотреть сообщение
В чем преимущество try..throw..catch от обычных условных конструкций?
Это "слегка" разные вещи.
0
taras atavin
3571 / 1755 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
11.10.2014, 17:55 #13
Цитата Сообщение от Wiiiiijjj Посмотреть сообщение
В чем преимущество try..throw..catch от обычных условных конструкций?
В том, что можно двумя операторами отловить ошибку времени исполнения по всему телу функции и компактно её обработать, а не раскидывать ифы где попало.
1
Wiiiiijjj
17 / 17 / 6
Регистрация: 25.08.2014
Сообщений: 186
11.10.2014, 18:07  [ТС] #14
А я правильно понимаю, если в блоке try случается, например, деление на ноль, автоматически генерируется код ошибки?
0
0x10
2512 / 1690 / 255
Регистрация: 24.11.2012
Сообщений: 4,237
11.10.2014, 18:13 #15
Цитата Сообщение от Wiiiiijjj Посмотреть сообщение
В чем преимущество try..throw..catch от обычных условных конструкций?
Деление на ноль - источник аппаратного прерывания, а не программного исключения.
0
11.10.2014, 18:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.10.2014, 18:13
Привет! Вот еще темы с ответами:

Как это работает? - C++
Доброго времени суток. Граждане программисты, подскажите пожалуйста как работает данный кусок кода??? А точнее дружественные функции...

Как это работает - C++
Здравствуйте уважаемые форумчане!Как это работает? Как например предотвратить выход за приделы допустимых значений переменных!? ...

Как это работает? - C++
Здравствуйте, можете, пожалуйста, поэтапно объяснить как работает приведенный ниже фрагмент кода? Что такое floor, return, ceil? double...

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


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

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

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