Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/14: Рейтинг темы: голосов - 14, средняя оценка - 4.79
 Аватар для Taras_Z
102 / 86 / 5
Регистрация: 27.10.2010
Сообщений: 534
Записей в блоге: 2

С++ .h файли

07.03.2012, 14:20. Показов 2711. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Зачем нужны заголовочние файли?
Чем они отличаются от просто файлов?
И у меня есть большая програма
как ее можно разделить на 3 части
тоесть одни функции туда а одни туда и с третей все подключается.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.03.2012, 14:20
Ответы с готовыми решениями:

Файли
Исходный файл представляет собой набор записей следующего вида: Фамилия, имя, отчество Дата рождения Пол Домашний адрес:город,...

Текстовие файли
Существуют 2 текстовые файлы в которые записаны латинские литери. Создать новый файл в который записать сначала все элементы первого файла...

Файли Lisp
Помогите написать на Сommon Lispe програму: Распечатать файл в обратном порядке, если его элементы являются атомами.

10
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
07.03.2012, 14:32
> Зачем нужны заголовочние файли?

Чтобы сваливать в них общие описания, которые должны подцепляться в нескольких файлах

> Чем они отличаются от просто файлов?

Принципиально - ничем

Для чего нужен define?
Си, использование вложенных файлов *.c
0
Полярный
 Аватар для dimcoder
477 / 449 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
07.03.2012, 14:33
Цитата Сообщение от Taras_Z Посмотреть сообщение
Зачем нужны заголовочние файли?
http://ru.wikipedia.org/wiki/%... 0%B9%D0%BB
В общем там объявлены, и возможно описаны, функции, классы, может быть переменные для использования в подключающей программе.

Цитата Сообщение от Taras_Z Посмотреть сообщение
как ее можно разделить на 3 части
Создаете заголовочный файл (в вашем случае 2) и выносите в него объявления и описания ваших функций. Так же надо сделать защиту от повторного объявления, весь код в заг файле обрамляете в код вида:
C++
1
2
3
4
#ifndef NAME_H       //Это чтобы не объявлялся заг файл 2 раза при записи вида #include <name.h>   
#define NAME_H                                                          #include <name.h>   //Это уже бессмысленная строка, т.к уже был объявлен такой же файл
//здесь описание функций и объявление
#endif
В третий файл делаете так
C++
1
2
#include <name.h>
#include <name2.h>

Не по теме:

Evg, извиняюсь, пока писал, уже ответили.

0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
07.03.2012, 14:38
dimcoder, не пори чушь и не приучай человека заниматься неправильными вещами
0
 Аватар для Taras_Z
102 / 86 / 5
Регистрация: 27.10.2010
Сообщений: 534
Записей в блоге: 2
07.03.2012, 14:46  [ТС]
а как тогда правильно?
0
Полярный
 Аватар для dimcoder
477 / 449 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
07.03.2012, 14:48
Evg, я всего лишь ответил на вопрос
Цитата Сообщение от Taras_Z Посмотреть сообщение
тоесть одни функции туда а одни туда и с третей все подключается.
пусть и не как Лев Толстой.
И какие по вашему
Цитата Сообщение от Evg Посмотреть сообщение
правильные вещи
?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
07.03.2012, 14:52
Цитата Сообщение от dimcoder Посмотреть сообщение
И какие по вашему
В посте #2 последняя ссылка

Разбиение исходника на отдельные файлы делается по двум причинам:
1. Упростить процесс написания и чтения программы. С десятком коротких файлов, разбитым по лигической функциональности, работать проще, чем с одним большим файлом, куда свалено абсолютно всё.
2. Ускорить процесс сборки. Если мы поменяли внутренности функции из одного файла, то хотелось бы, чтобы оставшиеся 9 файлов не надо было перекомпилировать.

Твой вариант является самой распространённой ошибкой начинающих. Он, очевидным образом, не удовлетворяет пункту 2. Представь себя, если бы твоим способом было написано ядро линкса (несколько десятков мегабайт в исходнике). Тогда после каждого исправления нужно было бы несколько десятков минут заниматься перекомпиляцией (если вообще хватило бы памяти, чтобы такой объём компилировать за раз).
0
 Аватар для Taras_Z
102 / 86 / 5
Регистрация: 27.10.2010
Сообщений: 534
Записей в блоге: 2
07.03.2012, 14:59  [ТС]
вот я делаю из за пункта 1
пока меня 2 не интересует
спасибо
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
07.03.2012, 15:13
Цитата Сообщение от Taras_Z Посмотреть сообщение
вот я делаю из за пункта 1
Дело хозяйское. А потом начинаются вопросы из разряда (утрированно): "я фарфоровой кружкой забивал гвоздь и не могу понять, почему гвоздь не забился, а кружка разбилась"

Добавлено через 4 минуты
dimcoder, если взять твой способ, то, на твой взгляд, зачем в твоём примере нужны конструкции типа "#ifndef NAME_H"?
0
Полярный
 Аватар для dimcoder
477 / 449 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
07.03.2012, 15:28
Цитата Сообщение от Evg Посмотреть сообщение
dimcoder, если взять твой способ, то, на твой взгляд, зачем в твоём примере нужны конструкции типа "#ifndef NAME_H"?
Ну скажем, создам я заголовочный файл name.h, а в нем напишу
C++
1
2
3
4
int func(int x)
{
   return x*10;
}
И напишу в программе:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <cstdlib>
#include <iostream>
#include <name.h>
#include <name.h>
using namespace std;
 
int main(int argc, char *argv[])
{
    cout << func(10) << endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}
Ошибка: redefinition of int func(int)
А если напишу в заголовочном файле так:
C++
1
2
3
4
5
6
7
#ifndef NAME_H
#define NAME_H
int func (int x)
{
    return 10*x;
}
#endif
То ошибка пропадает.
Просто при подключении множества файлов, вполне вероятно, что они будут использовать одну и ту же библиотеку, и что бы не вылазило такой ошибки для этого и нужно так делать.

PS Это на мой взгляд
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
07.03.2012, 15:34
Цитата Сообщение от dimcoder Посмотреть сообщение
И напишу в программе
А ты не пиши так в программе. Потому как два раза написать #include ничем не отличается от того, что ты два раза напишешь "int x;".

Цитата Сообщение от dimcoder Посмотреть сообщение
PS Это на мой взгляд
"#ifndef NAME_H" нужен именно при "нормальной" реализации. Когда код выделяют в отдельные модули, а в .h выделают интерфейсы модуля. В твоём случае ты просто разбил длинный текст на несколько коротких. Тут никакие ifndef'ы и не нужны. Хуже от них не будет, но реально не нужны
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.03.2012, 15:34
Помогаю со студенческими работами здесь

Файли Lisp
(defun cocha (file char) (with-open-file (str file) (loop for line = (read-char str ()) ...

Файли Lisp
Помогите написать програмку на Сommon Lispe: Распечатать количество букв sym в файле name. За рание спасибо!

Файли.Гистограмма
МОжет кто поможет а то не знаю как делать.. Придположения через структуры... Составить программу которая печатает гистограмма...

Файли{text}
Эта задача читает с файла числа, и суммирует минимальное и максимальное значение, а как эту сумму записать в данный файл???

c# txt файли
напишити кто-то алгоритм работы с txt файлом! считывание из файла в лейбл циклически! до символа #! при нажатии на кнопку считывается все...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Ноутбук (на замену), о котором я и не подозревал, что он у меня появится.
Programma_Boinc 28.12.2025
Ноутбук (на замену), о котором я и не подозревал, что он у меня появится. Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием "Ноутбук (на замену), о котором я и не. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru