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

#include - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 27, средняя оценка - 4.93
tanya2505
1 / 1 / 0
Регистрация: 24.05.2011
Сообщений: 68
14.01.2012, 09:19     #include #1
не понимаю какие <stdio.h>,<time.h> и т.д использовать. пыталась найти их характеристики в интернете, но толкового ответа не нашла, пришлось обратиться к вам! Посоветуйте пожалуйста или какую-ниб литературу, или объясните какие #include нужно использовать в том или ином случае..потому что при написании одной и той же программы, программисты вставляют разные #include..Еще не очень понятно с #define M 3 или #define N 4-зачем они нужны?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.01.2012, 09:19     #include
Посмотрите здесь:

C++ INCLUDE
ошибка в лабе не находит #include<iomanip.h> #include<conio.h> C++
C++ #include в C++
C++ Вопрос по #include
C++ Какая разница между #include<> и #include""?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
greeezz
272 / 165 / 4
Регистрация: 10.07.2011
Сообщений: 441
14.01.2012, 09:34     #include #2
tanya2505, простой и быстрый способ понять какой inculde использовать это пойти СЮДА там в окошке поиска написать то что вы хотите использовать. например getline или cout. Среди того что вам будет предложено в качестве найденых результатов кликните там где написано ваше искомое слово и C++ Reference и вам будет предложена страница с примером и описанием. в примере будет include-ы которые вам нужны.
Цитата Сообщение от tanya2505 Посмотреть сообщение
#define M 3 или #define N 4
это объявление констант.
пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include<iostream>
 
#define N 3
#define M 4
 
int main() {
 
    std::cout << "N = " << N << std:: endl;
    std::cout << "M = " << M << std:: endl;
 
    std::cin.get();
    return (0);
}
tanya2505
1 / 1 / 0
Регистрация: 24.05.2011
Сообщений: 68
14.01.2012, 09:56  [ТС]     #include #3
Цитата Сообщение от greeezz Посмотреть сообщение
tanya2505, простой и быстрый способ понять какой inculde использовать это пойти СЮДА там в окошке поиска написать то что вы хотите использовать. например getline или cout. Среди того что вам будет предложено в качестве найденых результатов кликните там где написано ваше искомое слово и C++ Reference и вам будет предложена страница с примером и описанием. в примере будет include-ы которые вам нужны.
вот взяла тот же cout, нет примера? или я не там смотрю?
Миниатюры
#include  
tanya2505
1 / 1 / 0
Регистрация: 24.05.2011
Сообщений: 68
14.01.2012, 09:58  [ТС]     #include #4
Цитата Сообщение от greeezz Посмотреть сообщение
tanya2505,

это объявление констант.
а почему бы просто не написать M= и N= ?
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
14.01.2012, 10:43     #include #5
Цитата Сообщение от tanya2505 Посмотреть сообщение
а почему бы просто не написать M= и N= ?
Потому что это макросы, а не код. Макросы подставляются, а не выполняются.

C++
1
2
#define N 5
std::cout << N;
Вовремя работы препроцессора вместо N подставиться все выражение справа от N, т.е. 5.
tanya2505
1 / 1 / 0
Регистрация: 24.05.2011
Сообщений: 68
14.01.2012, 10:53  [ТС]     #include #6
Chelioss, то есть это просто замена переменных слева на те что справа??
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
14.01.2012, 11:00     #include #7
tanya2505, на первой стадии компиляции все M и N в коде меняются на соответствующие значения.
tanya2505
1 / 1 / 0
Регистрация: 24.05.2011
Сообщений: 68
14.01.2012, 11:08  [ТС]     #include #8
а с #include-ами мне что делать? как разобраться, ведь, как я понимаю, для разных команд разные инклуды включать?
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
14.01.2012, 11:11     #include #9
tanya2505, ну они тоже заменяются.
Цитата Сообщение от tanya2505 Посмотреть сообщение
для разных команд разные инклуды включать?
Разные функция объявлены в разных заголовках. По сути можно их не помнить (например на экзамене), но сами эти функция помнить необходимо обязательно. Зная функцию, найти заголовок в котором она объявлена не составит и труда.
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
14.01.2012, 11:12     #include #10
Дык чтобы запомнить что-то для чего подключить, надо практиковаться. Вот взять и выучить все библиотеки вряд ли возможно. Да и не зачем.
Практикуйтесь и не будете таких вопросов задавать.
tanya2505
1 / 1 / 0
Регистрация: 24.05.2011
Сообщений: 68
14.01.2012, 11:28  [ТС]     #include #11
Chelioss, мне бы хотя бы основное-для основных командююпро массивы там, или когда сумму вычисляешь
BRcr
 Аватар для BRcr
4003 / 2292 / 155
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
14.01.2012, 11:30     #include #12
На мой взгляд лучше просто использовать предкомпилированные заголовки, включать все библиотечные хедеры, которые можно, и не париться, что, где там объявлено.
Вот так, например.
С++ Builder: как ускорить компиляцию с помощью предкомпилированных заголовков

Автор: Серебров Борис
Источник: www.people.overclockers.ru
Вместо вступления сразу приведу пример. Полная сборка (build) проекта, содержащего около 170 cpp-модулей, при использовании предкомпилированных заголовков происходит за 811 секунд, при этом число обработанных компилятором строк составляет 1,808,780. При компиляции того же проекта без использования предкомпилированных заголовков, время сборки составляет 2399 секунд, а число строк, обработанных компилятором - 45,261,820. Впечатляет, не так ли? Плата за это ускорение, в принципе не велика - предкомпилированный образ, размер которого около 40 Мб.

При компиляции исходных текстов, компилятор должен обработать все *.cpp файлы проекта и все включенные в них *.h - файлы. При этом обрабатываются как пользовательские заголовочные файлы, так и стандартные, такие как vcl.h или Word2k.h. Количество кода, находящегося в стандартных заголовках может быть очень большим, например размер файла Word2k.h превышает 5 Мб, в нем больше 130 000 строк кода.

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

Принцип действия предкомпилированных заголовков

Для управления предкомпилированными предназначена директива компилятора #pragma hdrstop. Все заголовочные файлы, включенные до этой директивы, помещаются в один образ, например:
C++
1
2
3
#include <vcl.h>
#include <string>
#pragma hdrstop
Такая последовательность создаст образ, содержащий скомпилированные vcl.h и string. Этот образ будет использован для другого cpp-файла, если в нем до директивы hdrstop будут включены те же файлы, в том же порядке. Обращу внимание, что важен не только состав, но и порядок следования заголовков - даже если следующий cpp-файл включает те же заголовки, но сначала указан string, а потом vcl.h, то для этого cpp-файла будет создан новый образ.

Таким образом, для повторного использования предкомпилированного заголовка необходимо выполнение двух условий:

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

ВСЕ cpp-файлы проекта имели одинаковый блок включений до директивы hdrstop
в этот блок должны входить ВСЕ стандартные заголовочные файлы, необходимые для проекта
Выполнить эти условия достаточно просто, для этого в начало каждого cpp-файла необходимо поместить следующие строки:
C++
1
2
#include <pch.h>
#pragma hdrstop
где pch.h - файл, содержащий включения всех стандартных заголовков:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#ifndef PCH_H
#define PCH_H
 
#define INC_VCLDB_HEADERS
#define INC_VCLEXT_HEADERS
#include <vcl.h>
 
#include <sysset.h>
#include <IniFiles.hpp>
#include <AppEvnts.hpp>
#include <ActnMan.hpp>
...
#endif
Полный текст моей версии этого файла приведен в конце статьи. На h-файлы, входящие в предкомпилированный образ, накладывается ограничение - в них не должно быть инициализированных данных, например, в math.hpp есть строки:
C++
1
2
static const Extended NaN = 0.0 / 0.0;
static const Extended Infinity = 1.0 / 0.0;
Из-за наличия этих констант включить math.hpp в файл pch.h нельзя.

Кстати, С++ Builder при добавлении новых модулей в проект реализует описанную стратегию управления предкомпилированными заголовками. Например, при создании нового приложения, файл Unit1.cpp будет таким:
C++
1
2
3
4
5
#include <vcl.h>   
#pragma hdrstop   
 
#include "Unit1.h"
....
Если посмотреть на текст vcl.h, то можно увидеть, что он является оболочкой для включения большого числа других стандартных заголовочных файлов.

Управлять составом включаемых в vcl.h заголовков можно с помощью специальных символов (INC_VCLDB_HEADERS, INC_VCLEXT_HEADERS и др.). В моей версии pch.h эти символы определяются с помощью #define до включения vcl.h, что приводит к увеличению числа включаемых файлов.

Как в существующем проекте перейти к использованию предкомпилированных заголовков

Даже в большом проекте перейти к использованию предкомпилированных заголовков достаточно просто.

В свойствах проекта нужно включить кэширование предкомпилированных заголовков и рекомендуется указать "персональный" файл, в котором будет храниться образ предкомпилированных заголовков: Project - Options - закладка Compiler, группа "Pre-compiled headers". Тут должно быть выбрано "Cache pre-compiled headers", а в поле "File Name" нужно ввести "pch.csm". При такой настройке образ с предкомпилированными заголовками будет находится в папке с проектом, в файле pch.csm.

После этого в начало каждого cpp-модуля необходимо вставить 2 строки:
C++
1
2
#include "pch.h"
#pragma hdrstop
Все ранее включенные заголовочные файлы остаются на своих местах, их удалять не надо. Например:
C++
1
2
3
4
5
6
#include "pch.h" // включает  vcl.h, string и т.д.
#pragma hdrstop
 
#include <vcl.h>
#include <string>
...
Так как во всех стандартных заголовках применяются стражи повторного включения, то повторное их упоминание не влечет за собой повторного включения.

В принципе, при использовании pch.h, техническая потребность во включении стандартных заголовков исчезает. Однако, полезно все же указывать все необходимые для каждого конкретного модуля заголовки ниже директивы #pragma hdrstop. Во-первых, это в некоторой степени документирует модуль - по включаемым файлам можно судить, какими возможностями пользуется этот модуль. Во-вторых, это облегчает повторное использование модуля в других проектах, в которых либо не используется pch.h, либо его содержимое может быть другим.

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

Как проверить, что предкомпилированные заголовки используются эффективно

При добавлении в проект новых файлов нужно не забывать включать в них pch.h, иначе для них не будет использован общий предкомпилированный образ. Такая же ситуация может возникнуть, если в каком-то модуле включаются стандартные заголовки, которые не вошли в pch.h. Для того, чтобы отследить такие файлы, есть несколько способов:

визуальное наблюдение за процессом компиляции. Обычно, число строк компилируемых в одном файле не должно превышать 10000-15000 строк
если для проекта выбран индивидуальный файл для хранения образа предкомпилированных заголовков и этот файл называется pch.csm, то нужно обратить внимание на наличие вспомогательных файлов с именами pch.#00, pch.#01 и т.д. Если для всех файлов проекта используется один и тот же предкомпилированный образ, то вспомогательный файл должен быть только один - pch.#00. Если таких файлов больше, это значит что для каких-то cpp-модулей создаются дополнительные образы.
Текст pch.h
C++
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#ifndef PCH_H
#define PCH_H
 
#define INC_VCLDB_HEADERS
#define INC_VCLEXT_HEADERS
#include <vcl.h>
/* Все, что подключается предыдущими 3-мя строчками
    // Core (minimal) Delphi RTL headers
    #include <System.hpp>
    #include <Types.hpp>
    #include <Windows.hpp>
    #include <Messages.hpp>
    #include <SysUtils.hpp>
    #include <Classes.hpp>
 
    // Core (minimal) VCL headers
    #if defined(INC_VCL)
    #include <Controls.hpp>
    #include <Graphics.hpp>
    #include <Forms.hpp>
    #include <Dialogs.hpp>
    #include <StdCtrls.hpp>
    #include <ExtCtrls.hpp>
 
    // VCL Database related headers
    #if defined(INC_VCLDB_HEADERS)
    #include <DBCtrls.hpp>
    #include <DB.hpp>
    #include <DBTables.hpp>
    #endif  //  INC_VCLDB_HEADERS
 
    // Full set of VCL headers
    #if defined(INC_VCLEXT_HEADERS)
    #include <Buttons.hpp>
    #include <ChartFX.hpp>
    #include <ComCtrls.hpp>
    #include <DBCGrids.hpp>
    #include <DBGrids.hpp>
    #include <DBLookup.hpp>
    #include <DdeMan.hpp>
    #include <FileCtrl.hpp>
    #include <GraphSvr.hpp>
    #include <Grids.hpp>
    #include <MPlayer.hpp>
    #include <Mask.hpp>
    #include <Menus.hpp>
    #include <OleCtnrs.hpp>
    #include <OleCtrls.hpp>
    #include <Outline.hpp>
    #include <Tabnotbk.hpp>
    #include <Tabs.hpp>
    #include <VCFImprs.hpp>
    #include <VCFrmla1.hpp>
    #include <VCSpell3.hpp>
    #endif  // INC_VCLEXT_HEADERS
 
    #endif  //  INC_VCL
*/
 
#include <sysset.h>
#include <IniFiles.hpp>
#include <AppEvnts.hpp>
#include <ActnMan.hpp>
#include <ActnCtrls.hpp>
#include <BandActn.hpp>
#include <CustomizeDlg.hpp>
#include <ImgList.hpp>
#include <ToolWin.hpp>
#include <ExtDlgs.hpp>
#include <ActnList.hpp>
 
#include <IBDatabase.hpp>
#include <IBCustomDataSet.hpp>
#include <IBQuery.hpp>
#include <IBTable.hpp>
#include <IBSQL.hpp>
#include <IBServices.hpp>
 
#include <math.h>
#include <assert.h>
#include <complex.h>
#include <values.h>
 
#include <map>
#include <list>
#include <set>
#include <vector>
#include <algorithm>
#include <functional>
#include <string>
#include <memory>
#include <fstream>
 
//нестандартные компоненты RxLib и EhLib
#include "CURREDIT.hpp"
#include "RXSpin.hpp"
#include "RxCalc.hpp"
#include "RxCombos.hpp"
#include "APPUTILS.hpp"
#include "RXDBCtrl.hpp"
#include "Placemnt.hpp"
#include "DBGridEh.hpp"
 
#endif
табаков
1 / 1 / 0
Регистрация: 13.01.2012
Сообщений: 25
14.01.2012, 11:33     #include #13
Цитата Сообщение от Chelioss Посмотреть сообщение
Дык чтобы запомнить что-то для чего подключить, надо практиковаться. Вот взять и выучить все библиотеки вряд ли возможно. Да и не зачем.
Практикуйтесь и не будете таких вопросов задавать.
почитай Л.Б Бузюкова О.Б Петрова "Современные методы программирования на я зыках С/С++"

там припрохождении какой-либо темы говорят какой нужно использовать заголовочный файл в директиве include

Добавлено через 2 минуты
C++
1
2
3
4
5
6
#include<cstdio>
#include<cmath>
#include<conio.h>
#include<stdlib.h>
#include<iostream>
#include<iomanip>
вот тебе основные
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
14.01.2012, 11:40     #include #14
табаков
Ну это вообще-то в каждой книге говорят.
Цитата Сообщение от tanya2505 Посмотреть сообщение
Chelioss, мне бы хотя бы основное-для основных командююпро массивы там, или когда сумму вычисляешь
Нет основных. Используете cout,cin,cerr,clog? <iostream> <ostream><istream>
Используете файловые потоки: <fstream><ofstream><ifstream>
Используете vector<>: <vector><algorithm>
Используете list<> : <list>
и т.д.

Читаете книгу, запоминаете что для чего подключать.

Добавлено через 1 минуту
Цитата Сообщение от BRcr Посмотреть сообщение
На мой взгляд лучше просто использовать предкомпилированные заголовки, включать все библиотечные хедеры, которые можно, и не париться, что, где там объявлено.
Вот так, например.
Вы это советуете тем, кто не знает стандартные хедеры?
tanya2505
1 / 1 / 0
Регистрация: 24.05.2011
Сообщений: 68
14.01.2012, 11:42  [ТС]     #include #15
Цитата Сообщение от Chelioss Посмотреть сообщение
табаков

Нет основных. Используете cout,cin,cerr,clog? <iostream> <ostream><istream>
Используете файловые потоки: <fstream><ofstream><ifstream>
Используете vector<>: <vector><algorithm>
Используете list<> : <list>
и т.д.
дело в том, что если я чего лишнего напишу на экзамене, меня обязательно спросят, что это..и я вряд-ли смогу ответить)
BRcr
 Аватар для BRcr
4003 / 2292 / 155
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
14.01.2012, 11:46     #include #16
Цитата Сообщение от Chelioss Посмотреть сообщение
Вы это советуете тем, кто не знает стандартные хедеры?
Ну да, как альтернативу один раз набил свой сборный хедер да тыкай его где ни попадя - что может быть проще?
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
14.01.2012, 11:54     #include #17
В вижуал студии если вы что-то использовали но не знаете, в каком это что-то инклуде, можно это выделить, правой мышкой кликнуть и перейти в инклуд нажам Go To Defenition. В других средах тоже должна быть такая фича. Со временем эти инклуды запоминаются. Но все запомнить все равно не получится. Если ваши экзаменаторы это не понимают, то вам можно только посочувствовать.
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
14.01.2012, 11:57     #include #18
Цитата Сообщение от BRcr Посмотреть сообщение
Ну да, как альтернативу один раз набил свой сборный хедер да тыкай его где ни попадя - что может быть проще?
Все существующие хедеры в мире что ли подключать?

Добавлено через 2 минуты
Ну как давайте перечислите все стандартные хедеры, которые подключив, всегда все стандартное будет работать.
BRcr
 Аватар для BRcr
4003 / 2292 / 155
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
14.01.2012, 12:03     #include #19
Цитата Сообщение от Chelioss Посмотреть сообщение
Все существующие хедеры в мире что ли подключать?
Наиболее употребительных на первых порах будет достаточно. Там, в статье примерчик имеется.
Хотя, это было бы весьма удобно
C++
1
2
#include <all_headers_in_the_world.hpp>
#pragma hdrstop
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.01.2012, 12:05     #include
Еще ссылки по теме:

Include C++
C++ Переполнение include
Чем отличается #include <cstring>, #include <string> и #include <string.h>? C++

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

Или воспользуйтесь поиском по форуму:
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
14.01.2012, 12:05     #include #20
Извините, но вы чушь пишите. Не знать какие хедеры подключать, тогда какой смысл учить язык?
Yandex
Объявления
14.01.2012, 12:05     #include
Ответ Создать тему
Опции темы

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