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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
Abendstern
3 / 3 / 0
Регистрация: 06.11.2011
Сообщений: 38
06.11.2011, 10:42     Вопросы по теории #1
Здравствуйте, уважаемые участники форума. Начинаю изучать программирование и язык 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++
Вопросы по С++ C++
C++ Вопросы по C++
Немного теории C++
немного теории C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
06.11.2011, 18:45     Вопросы по теории #21
Abendstern, от параметров линковщика зависит, далеко не обязательно, что вырежет unused code, обычно отдельными параметрами и средствами задается
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Байт
 Аватар для Байт
13948 / 8779 / 1221
Регистрация: 24.12.2010
Сообщений: 15,887
06.11.2011, 18:45     Вопросы по теории #22
Nameless One, Увы, все зависит от произвола хозяина и настроек gcc. Мне приходилось работать на трех(всего-то) Линукс-хостах, и повсюду все по разному
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
06.11.2011, 18:53     Вопросы по теории #23
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 1.c
int func_f(void)
{
    return 0;
}
 
int func_g(void)
{
    return 1;
}
 
int main()
{
    return func_f();
}
компилируем
Bash
1
gcc -c 1.c
линкуем
Bash
1
gcc 1.c -o a_1
видим, что в программе сохранились обе функции
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
alexxx@alexxx-laptop:~/c-test$ objdump -d a_1 | grep -C 5 func
 80483af:   ff d0                   call   *%eax
 80483b1:   c9                      leave  
 80483b2:   c3                      ret    
 80483b3:   90                      nop
 
080483b4 <func_f>:
 80483b4:   55                      push   %ebp
 80483b5:   89 e5                   mov    %esp,%ebp
 80483b7:   b8 00 00 00 00          mov    $0x0,%eax
 80483bc:   5d                      pop    %ebp
 80483bd:   c3                      ret    
 
080483be <func_g>:
 80483be:   55                      push   %ebp
 80483bf:   89 e5                   mov    %esp,%ebp
 80483c1:   b8 01 00 00 00          mov    $0x1,%eax
 80483c6:   5d                      pop    %ebp
 80483c7:   c3                      ret    
 
080483c8 <main>:
 80483c8:   55                      push   %ebp
 80483c9:   89 e5                   mov    %esp,%ebp
 80483cb:   e8 e4 ff ff ff          call   80483b4 <func_f>
 80483d0:   5d                      pop    %ebp
 80483d1:   c3                      ret    
 80483d2:   90                      nop
 80483d3:   90                      nop
другой вариант
компилируем
Bash
1
alexxx@alexxx-laptop:~/c-test$ gcc -c -fdata-sections -ffunction-sections 1.c
линкуем
Bash
1
alexxx@alexxx-laptop:~/c-test$ gcc -Wl,--gc-sections 1.o -o a_2
видим, что func_g была вырезана из бинарника
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
alexxx@alexxx-laptop:~/c-test$ objdump -d a_2 | grep -C 5 func
 8048388:   c7 04 24 1c 9f 04 08    movl   $0x8049f1c,(%esp)
 804838f:   ff d0                   call   *%eax
 8048391:   c9                      leave  
 8048392:   c3                      ret    
 
08048393 <func_f>:
 8048393:   55                      push   %ebp
 8048394:   89 e5                   mov    %esp,%ebp
 8048396:   b8 00 00 00 00          mov    $0x0,%eax
 804839b:   5d                      pop    %ebp
 804839c:   c3                      ret    
 
0804839d <main>:
 804839d:   55                      push   %ebp
 804839e:   89 e5                   mov    %esp,%ebp
 80483a0:   e8 ee ff ff ff          call   8048393 <func_f>
 80483a5:   5d                      pop    %ebp
 80483a6:   c3                      ret    
 80483a7:   90                      nop
 80483a8:   90                      nop
Abendstern
3 / 3 / 0
Регистрация: 06.11.2011
Сообщений: 38
06.11.2011, 19:43  [ТС]     Вопросы по теории #24
Цитата Сообщение от alex_x_x Посмотреть сообщение
от параметров линковщика зависит, далеко не обязательно, что вырежет unused code, обычно отдельными параметрами и средствами задается
Ага, вот теперь стало понятнее, спасибо за пример. Хотя как-то странно, почему по умолчанию не вырезается неиспользуемый код...

Не по теме:

Как вы, кстати, просматриваете такой дизассемблированный код (или как его правильно назвать)? Я тоже gcc использую, правда под виндовс. Хотел малость поэкспериментировать.

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.11.2011, 19:46     Вопросы по теории
Еще ссылки по теме:

C++ Вопросы по теории C++
Помощь в теории C++
непонятность по теории C++

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

Или воспользуйтесь поиском по форуму:
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
06.11.2011, 19:46     Вопросы по теории #25
Цитата Сообщение от Abendstern Посмотреть сообщение
Хотя как-то странно, почему по умолчанию не вырезается неиспользуемый код...
А почему он должен вырезаться? Программист писал, старался и было бы предательством со стороны компилятора взять и вырезать неиспользуемый код
Yandex
Объявления
06.11.2011, 19:46     Вопросы по теории
Ответ Создать тему
Опции темы

Текущее время: 21:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru