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

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

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

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

06.11.2011, 10:42. Просмотров 1218. Ответов 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 наверное включит всё содержимое файла?

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

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

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

Вопросы - C++
Здравствуйте! 1. Как сделать так, чтобы программа (функция (strlen() ) не считала пробелы? 2. Можно ли упростить (сократить)...

Вопросы по С++ - C++
1) Чем отличается const *char от сhar при использовании в программах? 2) Тип void * так и не понял как и что с ним делать. Видел в...

Вопросы по C++ - C++
Пожалуй начну) Можно ли в С++, обьявить определенному элементу массива определенное значение, как можно в пхп? Приведу пример: php:...

Вопросы!!! - C++
прошу посоветовать что почитать чтобы ответить на следующие вопросы!!(можно ответить ссылками) если будут промеры по теме буду рад:) ...

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

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

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

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

Добавлено через 53 секунды
Цитата Сообщение от Abendstern Посмотреть сообщение
а как тогда правильно назвать всю строку, завершённую точкой с запятой? инструкцией? выражением? или как-то по-другому?
называй ее "строка", ошибки не будет)
1
Nameless One
Эксперт С++
5774 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
06.11.2011, 12:35 #5
Цитата Сообщение от Abendstern Посмотреть сообщение
Как я понимаю, iostream - это заголовочный файл? Кстати, интересно, почему он вообще без расширения, какой это имеет смысл?
Да. Никакого. Заголовочные файлы стандартной библиотеки без расширения - это требования актуального стандарта. Но с тем же успехом можно было бы назвать заголовочный файл iostream так: iostream.h, iostream.header, iostream.exe. Препроцессору нет никакого дела до того, какое расширение у файла: он произведет препроцессорную подстановку любого файла, который передан аргументом к директиве #include
1
ValeryLaptev
Эксперт С++
1041 / 820 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
06.11.2011, 14:10 #6
Abendstern, со словами "оператор" и "операция" существует некоторая путаница.
В английском языке есть слово operator. В старые добрый времена этот термин переводили как "операция" (в смысле, например, арифметическая операция, логическая операция).
Управляющие структуры в английском языке обычно назывались statement (утверждение, предложение). И в старые добрые времена этот термин переводили как "оператор" (в смысле оператор цикла, условный оператор). В настоящее время термин statement все чаще переводят как "инструкция".
1
Байт
Эксперт C
16151 / 10429 / 1557
Регистрация: 24.12.2010
Сообщений: 19,766
06.11.2011, 14:27 #7
Abendstern, очень важно понять, что #include просто вставляет указанный файл в указанное место (ну, после всякой легкой препроцессорной обработки). Как правило, там содержатся всякие объявления функций, структур, типов данных и прочее, что нужно знать транслятору, чтобы разобраться в твоем коде. Иногда там для твоей конкретной проги есть вещи ненужные, но транслятор не считает обременительным лишние знания.
На линковку это никак не влияет. Линковщик просто ищет в стандартной библиотеке нужные подпрограммы, а ежели вдруг не найдет - кричит караул. Например в Линуксе подключение #include некоторых библиотек не дает собраться программе, если не укажешь явно эти библиотеки.
1
Nameless One
Эксперт С++
5774 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
06.11.2011, 15:13 #8
Цитата Сообщение от Байт Посмотреть сообщение
Например в Линуксе подключение #include некоторых библиотек не дает собраться программе, если не укажешь явно эти библиотеки.
ну это не только в Линуксе (или ты говоришь именно про стандартную библиотеку?)
0
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
06.11.2011, 15:19 #9
ну идея еще в том, что стандартные хедеры могут вообще не быть файлами
во всяком случае стандарт не обязывает их присутствовать физически
0
Байт
Эксперт C
16151 / 10429 / 1557
Регистрация: 24.12.2010
Сообщений: 19,766
06.11.2011, 16:45 #10
Цитата Сообщение от alex_x_x Посмотреть сообщение
ну идея еще в том, что стандартные хедеры могут вообще не быть файлами
во всяком случае стандарт не обязывает их присутствовать физически
Не понял. Нельзя ли пояснить?
0
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
06.11.2011, 16:54 #11
Цитата Сообщение от Байт Посмотреть сообщение
Не понял. Нельзя ли пояснить?
хедер может существовать только в воображении компилятора
0
easybudda
Модератор
Эксперт CЭксперт С++
9664 / 5614 / 952
Регистрация: 25.07.2009
Сообщений: 10,778
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> вполне нормальным образом отрабатывает...
2
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).
те может быть не файлом, но имя его придерживается правил именования файлов
2
Abendstern
3 / 3 / 0
Регистрация: 06.11.2011
Сообщений: 38
06.11.2011, 17:19  [ТС] #14
Всем спасибо за пояснения, буду разбираться дальше.

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

Не по теме:

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



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

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

Вопросы по C++ - C++
Всем привет! У меня появилось несколько вопросов по C++, был бы рад, если бы Вы помогли бы мне хотя бы из одним из них. 1) Как...

Вопросы по C++ - C++
Хочу учиться писать программы на C++, и у меня несколько вопросов 1) Этот язык такой же сложный, как Ассемблер? Например, Паскаль мне...

Вопросы - C++
Ребята, никто не писал никогда код на С++, связанный с имитационным моделированием? Просто, дали, там набор математич. формул и теория, а...

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


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
06.11.2011, 17:21
Ответ Создать тему
Опции темы

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