Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > HEADER файлы


Автор: HELPER 26.4.2005, 13:39
Народ, хелп!, как написать свой собственный h файл, что б короче потом в инклуде писать:

Код

#include <myHEADER.h>


или хотяб ссылки по теме plz!

Автор: Step 26.4.2005, 14:25
хедер содержит перечень объектов и объявления функций


например my.h

Код

int a;
int b;
int c;


int xxx(int a1,int a2,int a3);


а теперь

my.cpp
Код

int xxx(int a1,int a2,int a3){
return a1*a2+a3;
}

и получил уравнение кривой с целочисленным результатотм


Автор: pablo 26.4.2005, 14:53
Во первых если пишеш свои заголовочные файлы, то надо(желательно) их вксючать не <myheader.h> а "myheader.h", а делаются они так:

#ifndef MYHEADER_H
#define MYHEADER_H

Ну а тут пишеш чё душе угодно(прототипы функций, объябления класса(ов)) и сохраняеш его как *.h

#endif

Потом создаёш файл с таким же названием только расширение *.cpp пишешь #icnlude "myheader.h", ну и описывай что там(*.h) наопределял


Добавлено @ 14:55
Кстати описываниефайлов без директив препроцессора, считается плохим тоном программирования, т.к незащищает от повторного включения файлов в программу.

Автор: maxim1000 26.4.2005, 15:23
Цитата(Step @ 26.4.2005, 12:25)
int a;
int b;
int c;

а вот так писать очень нехорошо
#include'ом монжо подключать любую информацию, чтобы не писать ее в каждом файле
однако, есть соглашение, что при написании модуля программы пишется так же h-файл, который сообщает перечень объектов в модуле
поэтому все, что написано в h-файле должно (конечно, никто не запрещает, но очень рекомендуется) носить чисто декларативный характер
это означает:
1. макросы
2. объявления функций (с ; вместо тела)
3. типы там всякие (в том числе и классы)
4. объявления глобальных переменных, т.е. что-то вроде этого
Код

extern int a;

как только в h-файле будет описано создание какого-то объекта (переменная без extern или функция с {...}), это будет означать, что этот объект будет создан в каждом модуле, который подключил этот h-файл, заново, что может привести либо к конфликтам имен при линковании, либо к некорректной работе потом (когда в рзаных файлах под переменной a будут пониматься разные ячейки памяти)

Автор: En_t_end 26.4.2005, 16:28
Кстати давно хотел спросить...
Что конкретно обозначает макрокоманда #pragma once ?

Автор: chipset 26.4.2005, 16:38
Создай файл .h и добавь в проект smile
Цитата(En_t_end @ 26.4.2005, 06:28)
Что конкретно обозначает макрокоманда #pragma once ?

То что хидер будет пропарсен только один раз, если не ошибаюсь.

Автор: Alastis 26.4.2005, 17:19
Цитата(En_t_end @ 26.4.2005, 16:28)
Что конкретно обозначает макрокоманда #pragma once ?

это альтернатива комбинации #ifndef #define ... #endif для майкрософтовских компиляторов

Автор: AISIN 26.4.2005, 17:35
pablo тут надо уточнить если файл в одном коталоге что и компилируемый файл .*сpp то пишем #include" myheader.h",а если в разных то #include "c:\labmyheader.h",т.е. нужно полный путь прописывать!

Автор: pablo 27.4.2005, 16:14
Конечно, но если его к стандарным файлалм запихнуть то можно и #include <myfile.h> прописать

Автор: AISIN 27.4.2005, 17:56
pablo Обсалютно с тобой согласен!

Автор: Just_Girl 10.10.2007, 14:17
Привет, у меня вопрос по поводу header files. Please help кто может! smile  Пишу програмку про Банк. 
Вот код моего header fila:

Bank.h
Код

#ifndef _BANK_H // if not defined
#define _BANK_H // define MyHeader

#include <engine.h>


typedef struct
{
    u8 saldo;

}struct_Rekening;


#endif // end if not defined, and end the header file


Как провести инициализацию saldo в Bank.h, чтобы использовать его в других файлах? Или мне ет надо делать не в Bank.h, а в Bank.c??? smile




Автор: JackYF 10.10.2007, 19:18
Цитата(Just_Girl @  10.10.2007,  14:17 Найти цитируемый пост)
Как провести инициализацию saldo в Bank.h, чтобы использовать его в других файлах? Или мне ет надо делать не в Bank.h, а в Bank.c???

сформулируй нормально требование, я мало что понял из этой строки.

Автор: maxim1000 10.10.2007, 20:43
struct_Rekening - тип данных, т.е. в программе могут быть несколько переменных такого типа, у каждой будет поле saldo
так что возникает вопрос: о каком именно saldo идёт речь?
P.S.
ещё вопрос: C или C++?

Автор: Daevaorn 10.10.2007, 20:49
Цитата(JackYF @  10.10.2007,  20:18 Найти цитируемый пост)
сформулируй нормально требование, я мало что понял из этой строки. 

скорей всего надо раскрыть тему extern

Автор: Just_Girl 11.10.2007, 10:03
Речь идёт не о C++, а о C.  Мне надо синициализировать saldo, например saldo = 200, чтобы с другово файла смочь его употребить.
Например: 

bank_automaat.c
Код

Rekening rek;

rek.saldo = 200;

void neemOp(u8 bedrag)
{
    rek.saldo -= bedrag; 
    ConsolePrintf("Uw saldo is nu: %i\n", 4, rek.saldo);
}



Но глобальная инитиализация saldo не получается, поетому может ет можно в  structe как-то сделать??? 
И ещё один вопрос, какую роль играют extern, static и void  в C? Когда что употреблять?

Автор: JackYF 11.10.2007, 14:28
Цитата(Just_Girl @  11.10.2007,  10:03 Найти цитируемый пост)
И ещё один вопрос, какую роль играют extern, static и void  в C? Когда что употреблять? 

а не вопрос, это целая глава хороших книг по С/С++, кои и советую почитать на досуге, много вопросов прояснится.
Цитата(Daevaorn @  10.10.2007,  20:49 Найти цитируемый пост)
скорей всего надо раскрыть тему extern


угу.

В одном файле делаешь так:


Цитата(Just_Girl @  11.10.2007,  10:03 Найти цитируемый пост)
Rekening rek;
rek.saldo = 200;


в остальных для использования делаешь

Код

extern Rekening rek;


и затем можешь обращаться в переменной. В .h-файле ничего лишнего не прописывай, только объявление структуры, как и было.

Автор: Just_Girl 11.10.2007, 15:28
Времени нет книг читать, я на стажировке, всё надо делать быстро. smile 
hmm ясно, ну в таком случае ещё малюсенький вопросик smile. Как сделать переменную глобальной? Может её в header file можно как-то задефинировать?

Автор: zkv 11.10.2007, 15:40
Цитата(Just_Girl @  11.10.2007,  15:28 Найти цитируемый пост)
Как сделать переменную глобальной?

тыщу второй раз повторю smile
в одном из срр-файлов определяем (только один раз!):
Код

int globalVar = 0;

там где нужно использовать объявляем (можно дублировать сколько угодно раз): 
Код

extern int globalVar;

можно это объявление запихать в подходящий хедер, тогда оно будет инклудиться с его подключением.

Автор: Just_Girl 11.10.2007, 15:40
Да кстати переменная saldo так инитиализироватй нельзя. :( Можно только в функции. Например:

Код


Rekening rek;

void checkSaldo()
{
  rek.saldo = 200;
  PrintConsole("your saldo is:", rek.saldo);
}



Тоесть глобально инитиализировать не виходит.  smile

Добавлено через 3 минуты и 23 секунды
Говорю во второй раз, Работаю не с "C++", а с "C". Поэтому не имею дело с файлами cpp. 

Автор: zkv 11.10.2007, 15:44
Цитата(Just_Girl @  11.10.2007,  15:40 Найти цитируемый пост)
Да кстати переменная saldo так инитиализироватй нельзя

все можно  smile 
Rekening rek = {200};
или можно конструктор нарисовать, чтоб посимпатичнее смотрелось. 
Вообщем читайте книги smile

Автор: Just_Girl 11.10.2007, 15:47
Слуш, ты наверно не понимаешь! Я ет всё уже пробовала, ато просто так не написала бы на форуме. Так тож не выходит: Rekening rek = {200}; Странно всё это, я кстати работаю в Metrowerks CodeWarrior.

Добавлено через 43 секунды
Может ет от этого? :(

Автор: zkv 11.10.2007, 16:01
Цитата(Just_Girl @  11.10.2007,  15:40 Найти цитируемый пост)
Говорю во второй раз, Работаю не с "C++"

сорри...
но суть не меняется, вместо cpp-файлов с расширением c.
Код

//file.h
typedef struct 
{
    int field;
} ST;

extern ST g;
//file.c
ST g = { 1 };

Автор: Just_Girl 11.10.2007, 16:10
Слуш сработало, ты супер!!!  smile  haha Thanxxx

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)