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

С++ .h файли

07.03.2012, 14:20. Показов 2740. Ответов 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru