Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
Abendstern
3 / 3 / 0
Регистрация: 06.11.2011
Сообщений: 38
#1

Вопросы по теории - C++

06.11.2011, 10:42. Просмотров 1198. Ответов 24
Метки нет (Все метки)

Здравствуйте, уважаемые участники форума. Начинаю изучать программирование и язык C++ в частности. И сразу же появились вопросы, теоретического так скажем плана. Задам их, допустим, на примере всеми любимого хелловорда (а на большее я пока и не способен ):

C++
1
2
3
4
5
6
7
8
9
#include <iostream>
 
int main()
{
    std::cout << "Hello people!\n";
 
    system("pause");
    return 0;
}
1. Сначала немного о терминологии, я если честно, запутался немного, что такое оператор, операция, выражение, ещё встречал термин инструкция... Дабы в дальнейшем грамотно изъясняться, я бы хотел прояснить этот момент. Допустим, << это оператор? или вся строка будет называться оператором?

2. Какую смысловую нагрузку имеет выражение return 0 ? Зачем возвращать что-то операционной системе, и как она будет использовать это значение? Всякой ли ОС оно вообще нужно?

3. Как я понимаю, iostream - это заголовочный файл? Кстати, интересно, почему он вообще без расширения, какой это имеет смысл? И если это только заголовочный файл, то где находится реализация описанных в нём методов, в частности операторов <<, >> ?

4. И вообще, насчёт подключения файлов... В исполняемом файле связывается объектный код, написанной мною проги и объектный код из стандартной библиотеки? Туда включается вся-вся информация из подключаемого файла? Или только тот фрагмент, который касается используемых мною функций? Т.е. в примере выше, я использую лишь оператор вывода, а ввод мне не нужен. Избыточная информация об операторе >> вроде как не нужна. Но с другой стороны, директива include наверное включит всё содержимое файла?

Извиняюсь, если что-то непонятно спросил. Заранее спасибо за ответы.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.11.2011, 10:42     Вопросы по теории
Посмотрите здесь:

вопросы по теории - C++
помогите ответить на вопросы по теории!! Тема - СТРУКТУРЫ 1) способы обьявления струкутрных переменных. Динамическое выделение...

Вопросы по теории C++ - C++
Есть несколько вопросов по теории C++ 1)Что такое функция пользователя 2)Как инициализировать указатель Если можно , то без всяких...

Наболевшие вопросы - C++
Есть несколько вопросов, помогите пожалуйста найти ответ.. 1) Если мы выделяем память динамически для массива объектов класса, есть ли...

Вопросы сериализации - C++
Ноги здесь: http://www.cyberforum.ru/cpp-beginners/thread433207.html Кстати, по этой теме. А если мне надо загнать довольно...

Вопросы начинающего - C++
Здравствуйте в С++ я еще новичок, поэтому, если позволите то я задам несколько вопросов -class A: public B По-смыслу это значит что...

Житейские вопросы по С++ - C++
Здравствуйте я бы хотел задать несколько житейский вопросов по С++ 1)Когда лучше начать изучать С++ 2)Сколько по С++ должен знать 10...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
diagon
Higher
1928 / 1194 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
06.11.2011, 10:49     Вопросы по теории #2
Цитата Сообщение от Abendstern Посмотреть сообщение
Допустим, << это оператор?
Да.
Цитата Сообщение от Abendstern Посмотреть сообщение
или вся строка будет называться оператором?
Нет.
Вообще найдите список операторов с++, понятнее станет.

Цитата Сообщение от Abendstern Посмотреть сообщение
Какую смысловую нагрузку имеет выражение return 0
В данном случае никакую, main возвращает 0 по умолчанию.

Цитата Сообщение от Abendstern Посмотреть сообщение
Зачем возвращать что-то операционной системе
Как минимум чтобы узнать, нормально ли завершилась программа. Если программа возвращает 0 - то нормально. Может, еще для чего-нибудь нужно.
Abendstern
3 / 3 / 0
Регистрация: 06.11.2011
Сообщений: 38
06.11.2011, 11:01  [ТС]     Вопросы по теории #3
diagon,
Спасибо, а как тогда правильно назвать всю строку, завершённую точкой с запятой? инструкцией? выражением? или как-то по-другому?

То что 0 по умолчанию возвращается, это я уже понял, ага. Но если я напишу return 1, например, то с виду вроде ничего не изменится. По крайней мере, ОС не завопит: "ай-ай, прога поломалась" Так что не совсем понятно, зачем сообщать ОС, как прога завершилась...
Kastaneda
Форумчанин
Эксперт С++
4511 / 2853 / 227
Регистрация: 12.12.2009
Сообщений: 7,249
Записей в блоге: 1
Завершенные тесты: 1
06.11.2011, 11:06     Вопросы по теории #4
Цитата Сообщение от Abendstern Посмотреть сообщение
Но если я напишу return 1, например, то с виду вроде ничего не изменится. По крайней мере, ОС не завопит: "ай-ай, прога поломалась" Так что не совсем понятно, зачем сообщать ОС, как прога завершилась...
Например у тебя есть две программы, они должны запускаться по очереди, т.е. вторая запускается после завершения работы первой. Работа второй программы зависит от того, как завершилась первая. Если первая вернула 0, значит вторая запускается, если не 0, значит в первой возникла какая то ошибка, и второй запускаться нет смысла.
Наглядный пример компилятор и линкер, если компилятор вернет не 0, то линкер не будет запущен.

Добавлено через 53 секунды
Цитата Сообщение от Abendstern Посмотреть сообщение
а как тогда правильно назвать всю строку, завершённую точкой с запятой? инструкцией? выражением? или как-то по-другому?
называй ее "строка", ошибки не будет)
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
06.11.2011, 12:35     Вопросы по теории #5
Цитата Сообщение от Abendstern Посмотреть сообщение
Как я понимаю, iostream - это заголовочный файл? Кстати, интересно, почему он вообще без расширения, какой это имеет смысл?
Да. Никакого. Заголовочные файлы стандартной библиотеки без расширения - это требования актуального стандарта. Но с тем же успехом можно было бы назвать заголовочный файл iostream так: iostream.h, iostream.header, iostream.exe. Препроцессору нет никакого дела до того, какое расширение у файла: он произведет препроцессорную подстановку любого файла, который передан аргументом к директиве #include
ValeryLaptev
Эксперт С++
1039 / 818 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
06.11.2011, 14:10     Вопросы по теории #6
Abendstern, со словами "оператор" и "операция" существует некоторая путаница.
В английском языке есть слово operator. В старые добрый времена этот термин переводили как "операция" (в смысле, например, арифметическая операция, логическая операция).
Управляющие структуры в английском языке обычно назывались statement (утверждение, предложение). И в старые добрые времена этот термин переводили как "оператор" (в смысле оператор цикла, условный оператор). В настоящее время термин statement все чаще переводят как "инструкция".
Байт
Эксперт C
15835 / 10162 / 1522
Регистрация: 24.12.2010
Сообщений: 19,160
06.11.2011, 14:27     Вопросы по теории #7
Abendstern, очень важно понять, что #include просто вставляет указанный файл в указанное место (ну, после всякой легкой препроцессорной обработки). Как правило, там содержатся всякие объявления функций, структур, типов данных и прочее, что нужно знать транслятору, чтобы разобраться в твоем коде. Иногда там для твоей конкретной проги есть вещи ненужные, но транслятор не считает обременительным лишние знания.
На линковку это никак не влияет. Линковщик просто ищет в стандартной библиотеке нужные подпрограммы, а ежели вдруг не найдет - кричит караул. Например в Линуксе подключение #include некоторых библиотек не дает собраться программе, если не укажешь явно эти библиотеки.
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
06.11.2011, 15:13     Вопросы по теории #8
Цитата Сообщение от Байт Посмотреть сообщение
Например в Линуксе подключение #include некоторых библиотек не дает собраться программе, если не укажешь явно эти библиотеки.
ну это не только в Линуксе (или ты говоришь именно про стандартную библиотеку?)
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
06.11.2011, 15:19     Вопросы по теории #9
ну идея еще в том, что стандартные хедеры могут вообще не быть файлами
во всяком случае стандарт не обязывает их присутствовать физически
Байт
Эксперт C
15835 / 10162 / 1522
Регистрация: 24.12.2010
Сообщений: 19,160
06.11.2011, 16:45     Вопросы по теории #10
Цитата Сообщение от alex_x_x Посмотреть сообщение
ну идея еще в том, что стандартные хедеры могут вообще не быть файлами
во всяком случае стандарт не обязывает их присутствовать физически
Не понял. Нельзя ли пояснить?
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
06.11.2011, 16:54     Вопросы по теории #11
Цитата Сообщение от Байт Посмотреть сообщение
Не понял. Нельзя ли пояснить?
хедер может существовать только в воображении компилятора
easybudda
Эксперт CЭксперт С++
9461 / 5474 / 927
Регистрация: 25.07.2009
Сообщений: 10,498
06.11.2011, 17:02     Вопросы по теории #12
Цитата Сообщение от Nameless One Посмотреть сообщение
или ты говоришь именно про стандартную библиотеку?
К примеру мало написать #include <math.h> (ну или <cmath>), нужно ещё при сборке -lm указать.

Цитата Сообщение от alex_x_x Посмотреть сообщение
ну идея еще в том, что стандартные хедеры могут вообще не быть файлами
во всяком случае стандарт не обязывает их присутствовать физически
Цитата Сообщение от Байт Посмотреть сообщение
Не понял. Нельзя ли пояснить?
Тонкостей того, откуда что берётся, не знаю, но по сути действительно так. К примеру как ни искал в CygWin-овском /usr/include файл unistd.h, так и не нашёл, при этом gcc встретив в программе #include <unistd.h> вполне нормальным образом отрабатывает...
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
06.11.2011, 17:02     Вопросы по теории #13
17.4.1.2 Headers
1 The elements of the C++ Standard Library are declared or defined (as appropriate) in a header (158)
(158) A header is not necessarily a source file, nor are the sequences delimited by < and > in header names necessarily valid source file names (16.2).
те может быть не файлом, но имя его придерживается правил именования файлов
Abendstern
3 / 3 / 0
Регистрация: 06.11.2011
Сообщений: 38
06.11.2011, 17:19  [ТС]     Вопросы по теории #14
Всем спасибо за пояснения, буду разбираться дальше.

Байт, не могли бы пояснить, транслятор это то же самое что компилятор? Вообще в википедии пишут, что компилятор состоит из транслятора и компоновщика. Хм, но в книгах обычно понятия разнесены по отдельности, именно компилятор и компоновщик. Короче говоря, путаница с этими понятиями

Не по теме:

Может быть то что я спрашиваю, не так уж существенно (хотя, не мне пока судить), просто хочется сразу овладеть корректной терминологией, чтобы не было недопониманий при общении с программистами



Итак, правильно я понимаю, директива препроцессора include вставляет текст подключаемого файла полностью, а вот на этапе линковки используется код только нужных функций? т.е. ничего "лишнего" в исполняемый файл не пройдёт?

И ещё раз повторю один из вопросов: раз уж мы подключаем только хедеры, где-то же должны находиться реализации конкретных функций? Иными словами, где лежит сама эта стандартная библиотека и чем она представлена?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.11.2011, 17:21     Вопросы по теории
Еще ссылки по теме:

Вопросы начинающего - C++
Здравствуйте. Самостоятельно приступила к изучению Visual C++, т.к. наставников в шаговой доступности нет, а вопросы есть, решила...

Ответить на вопросы - C++
1. Какое условие является обязательным для присвоения одного объекта другому? 2. Когда объект передается функции в качестве аргумента,...

Вопросы о графах - C++
Всем привет! Появилось несколько вопросов о графах: 1) Как представить граф в C++? 2) Как найти самый краткий путь между двумя...

Вопросы от новичка по C++ - C++
1)В С++ можно делить с остатком только вещественные числа? К примеру: int a,b; float c; Если 5 поделить на 4 ,то получим 1 без...


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

Или воспользуйтесь поиском по форуму:
Байт
Эксперт C
15835 / 10162 / 1522
Регистрация: 24.12.2010
Сообщений: 19,160
06.11.2011, 17:21     Вопросы по теории #15
Цитата Сообщение от easybudda Посмотреть сообщение
Тонкостей того, откуда что берётся, не знаю, но по сути действительно так. К примеру как ни искал в CygWin-овском /usr/include файл unistd.h, так и не нашёл, при этом gcc встретив в программе #include <unistd.h> вполне нормальным образом отрабатывает...
Любопытно... Т.е. компилятор, чтоб не мучиться, какие-то популярные хедеры держит в себе, т.е оптимизирует обращение к диску? Ну что ж, честь ему и хвала. Но для ТС, ИМХО, лучше представлять себе, что это подстановка текста из файла. А то, что он подставляется не совсем привычным образом, так чего только эти программисты не напридумают!
Yandex
Объявления
06.11.2011, 17:21     Вопросы по теории
Ответ Создать тему
Опции темы

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