"компилируется" ли *.h файл
От: physic  
Дата: 16.03.06 13:16
Оценка:
как можно назвать обработку и подклучение *.h файла в C++ проекте?
Re: "компилируется" ли *.h файл
От: Alxndr Германия http://www.google.com/profiles/alexander.poluektov#buzz
Дата: 16.03.06 13:18
Оценка:
Здравствуйте, physic, Вы писали:

P>как можно назвать обработку и подклучение *.h файла в C++ проекте?


Препроцессингом?
Re[2]: "компилируется" ли *.h файл
От: physic  
Дата: 16.03.06 13:19
Оценка:
Здравствуйте, Alxndr, Вы писали:

A>Здравствуйте, physic, Вы писали:


P>>как можно назвать обработку и подклучение *.h файла в C++ проекте?


A>Препроцессингом?


Разве я думал что препроцессор работает после директивы #
Re[2]: "компилируется" ли *.h файл
От: Crackjack Россия  
Дата: 16.03.06 13:24
Оценка:
Здравствуйте, Alxndr, Вы писали:

A>Здравствуйте, physic, Вы писали:


P>>как можно назвать обработку и подклучение *.h файла в C++ проекте?


A>Препроцессингом?


В .h объявляются ф-ии, т.д. Возможна реализация, но не инициализация. Таким образом, всё что будет необходимо твоему *.c будет взято из *.h, остальное игнорируется. Определение включению заголовочных файлов не скажу, не задавался таким вопросом, раньше не где ни встречал.
Re[3]: "компилируется" ли *.h файл
От: ekamaloff Великобритания  
Дата: 16.03.06 13:26
Оценка:
Здравствуйте, physic, Вы писали:

P>Разве я думал что препроцессор работает после директивы #


Это не директива. А include кстати тоже идет после "#", не замечал?
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde
Re[3]: "компилируется" ли *.h файл
От: Alxndr Германия http://www.google.com/profiles/alexander.poluektov#buzz
Дата: 16.03.06 13:26
Оценка:
Здравствуйте, physic, Вы писали:

P>Здравствуйте, Alxndr, Вы писали:


A>>Здравствуйте, physic, Вы писали:


P>>>как можно назвать обработку и подклучение *.h файла в C++ проекте?


A>>Препроцессингом?


P>Разве я думал что препроцессор работает после директивы #


*.h файлы компилятором не обрабатываются.
Обрабатываются *.c (*.cpp и т.п.) файлы.
Включение (рекурсивное) инклюдов выполняется при препроцессинге.
Re: "компилируется" ли *.h файл
От: physic  
Дата: 16.03.06 13:29
Оценка: +1 :)
Здравствуйте, physic, Вы писали:

P>как можно назвать обработку и подклучение *.h файла в C++ проекте?


Дело в том что *.h файл подключается к *.cpp или *.h файлу препроцессором, а вот когда у компилятора есть полностью скомпонованная единица трансляции *.cpp + все необходимые *.h файлы, тогда компилятор компилит весь получившийся текст. Отсюда можно заключить что *.h файл компилится после обработки препроцессора.
Re[4]: "компилируется" ли *.h файл
От: physic  
Дата: 16.03.06 13:36
Оценка:
Здравствуйте, Alxndr, Вы писали:

A>*.h файлы компилятором не обрабатываются.


Вот тут я не согласен ... В *.h файле те же объявления которые могли бы быть и в *.сpp файле, и эти объявления компилируются в бинарный код.
Re[5]: "компилируется" ли *.h файл
От: Crackjack Россия  
Дата: 16.03.06 13:42
Оценка:
Здравствуйте, physic, Вы писали:

P>Вот тут я не согласен ... В *.h файле те же объявления которые могли бы быть и в *.сpp файле, и эти объявления компилируются в бинарный код.


Ачто делает этот год?
Re[5]: "компилируется" ли *.h файл
От: Alxndr Германия http://www.google.com/profiles/alexander.poluektov#buzz
Дата: 16.03.06 13:46
Оценка:
Здравствуйте, physic, Вы писали:

P>Здравствуйте, Alxndr, Вы писали:


A>>*.h файлы компилятором не обрабатываются.


P>Вот тут я не согласен ... В *.h файле те же объявления которые могли бы быть и в *.сpp файле, и эти объявления компилируются в бинарный код.


Дело твоё.

Есть код:

header.h
int my_cool_func();

source.cpp
#include "header.h"

int my_cool_func()
{
    return -1;
}


После фазы препроцессинга иммем единицу трансляции следующего содержания:

int my_cool_func();

int my_cool_func()
{
    return -1;
}


Кури, вообщем, Стандарт и книги.
Re[2]: "компилируется" ли *.h файл
От: Alxndr Германия http://www.google.com/profiles/alexander.poluektov#buzz
Дата: 16.03.06 13:46
Оценка:
Здравствуйте, physic, Вы писали:

P>Здравствуйте, physic, Вы писали:


P>>как можно назвать обработку и подклучение *.h файла в C++ проекте?


P>Дело в том что *.h файл подключается к *.cpp или *.h файлу препроцессором, а вот когда у компилятора есть полностью скомпонованная единица трансляции *.cpp + все необходимые *.h файлы, тогда компилятор компилит весь получившийся текст. Отсюда можно заключить что *.h файл компилится после обработки препроцессора.


Путаница в терминологии

Компилятор компилирует единицы трансляции.
В системах, где исходные тексты хранятся в файлах, единица трансляции — это файл, обработанный препроцессорос с рекурсивно включенными *.h-файлами.
Re[5]: "компилируется" ли *.h файл
От: ekamaloff Великобритания  
Дата: 16.03.06 13:48
Оценка:
Здравствуйте, physic, Вы писали:

P>Вот тут я не согласен ... В *.h файле те же объявления которые могли бы быть и в *.сpp файле, и эти объявления компилируются в бинарный код.


При чем здесь объявления? .

Вот пример:

До препроцессинга:

// header1.h

void some_external_func();
class SomeClass {};

// header2.h
#include "header1.h"

void another_external_func();

// source.cpp
#include "header2.h"

int main()
{
  SomeClass a;
  some_external_func();
  another_external_func()
  return 0;
}


После препроцессинга:

// source.cpp

void some_external_func();
class SomeClass {};
void another_external_func();

int main()
{
  SomeClass a;
  some_external_func();
  another_external_func()
  return 0;
}


Вот это и подается на вход компилятору. Как это не укладывается в твою концепцию?
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde
Re[6]: "компилируется" ли *.h файл
От: Crackjack Россия  
Дата: 16.03.06 13:55
Оценка:
Компилятор строит свои внутренние таблицы: функция, параметр, возвращаемое значение; а более что ещё можно сделать?
Потом эти таблицы не трогаются если *.h не меняется. А если меняется, то таблица перестраивается, и компилятся все файлы куда он входил. Что-то вроде этого. Что за код может сгенириться из объявлений?
Re[6]: "компилируется" ли *.h файл
От: Аноним  
Дата: 16.03.06 13:57
Оценка: +1 :)
Для начала — забудьте про такое понятие — расширение файла. И соответственно все предрассудки — что .cpp — для кода а .h для объявления. Компиляторы компилируют то что задано в файлах проекта или make-файлах. А заданы там для компиляции обычно только .cpp файлы (вижул так сам делает всегда).
А все что пишется в #include просто вставляется в исходник компилируемого файла. Т.е компилятор сам делает copy-paste текста из заданного файла на место директивы #include. А потом делает copy-paste для всех инклудов что были во включенном файле.. и тп -рекурсивно пока не получился один здоровенннный листинг который и скомпилирцется и из которого и получится файл helloworld.obj
Re[3]: "компилируется" ли *.h файл
От: kan_izh Великобритания  
Дата: 16.03.06 13:58
Оценка:
Crackjack wrote:

> A>Препроцессингом?

>
> В .h объявляются ф-ии, т.д. Возможна реализация, но не инициализация.
Там возможно всё что угодно. Правда в некоторых случаях (когда один h включается из нескольких cpp) программа не слинкуется.

> Таким образом, всё что будет необходимо твоему *.c будет взято из *.h,

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

.cpp и .h файлы — чистая условность. Просто так договорились, языку до этого пофиг. Называй файлы как хочешь и что
угодно куда угодно подключай.
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[3]: "компилируется" ли *.h файл
От: rg45 СССР  
Дата: 16.03.06 14:07
Оценка:
"physic" <52389@users.rsdn.ru> wrote in message news:1786412@news.rsdn.ru...
> Здравствуйте, Alxndr, Вы писали:
>
> A>Здравствуйте, physic, Вы писали:
>
> P>>как можно назвать обработку и подклучение *.h файла в C++ проекте?
>
> A>Препроцессингом?
>
> Разве я думал что препроцессор работает после директивы #

Так и есть: препроцессор обрабатывает директиву #include, подставляя все(или не все, или не подставляя, в зависимости от других директив препроцессора), что написано в h-файле в текст, который в дальнейшем передается компилятору.
Компилятору уже безразлично, в каком файле написан тот или иной фрагмент текста программы.
Posted via RSDN NNTP Server 1.9
--
Справедливость выше закона. А человечность выше справедливости.
Re[7]: "компилируется" ли *.h файл
От: bolshik Россия http://denis-zhdanov.blogspot.com/
Дата: 16.03.06 14:59
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Для начала — забудьте про такое понятие — расширение файла. И соответственно все предрассудки — что .cpp — для кода а .h для объявления. Компиляторы компилируют то что задано в файлах проекта или make-файлах. А заданы там для компиляции обычно только .cpp файлы (вижул так сам делает всегда).

А>А все что пишется в #include просто вставляется в исходник компилируемого файла. Т.е компилятор сам делает copy-paste текста из заданного файла на место директивы #include. А потом делает copy-paste для всех инклудов что были во включенном файле.. и тп -рекурсивно пока не получился один здоровенннный листинг который и скомпилирцется и из которого и получится файл helloworld.obj

именно
Плюс можно вспомнить про precompiled header(msdn). Он применяется как раз для того, чтобы не компилировать многократно одни и те же куски кода, и представляет собой the state of compilation at a certain point.
http://denis-zhdanov.blogspot.com
Re: "компилируется" ли *.h файл
От: Андрей Тарасевич Беларусь  
Дата: 16.03.06 21:51
Оценка:
Здравствуйте, physic, Вы писали:

P>как можно назвать обработку и подклучение *.h файла в C++ проекте?


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

Таким образом, отвечая на вопрос заданный в заголовке сообщения, сами .h-файлы не компилируются (в узком понитмании термина "компляция"). Содержимое же этих файлов, после соответствующей подстановки, компилируется вместе со всем остальным кодом.
Best regards,
Андрей Тарасевич
Re[3]: "компилируется" ли *.h файл
От: Андрей Тарасевич Беларусь  
Дата: 16.03.06 21:57
Оценка:
Здравствуйте, Crackjack, Вы писали:

P>>>как можно назвать обработку и подклучение *.h файла в C++ проекте?


A>>Препроцессингом?


C>В .h объявляются ф-ии, т.д. Возможна реализация, но не инициализация. Таким образом, всё что будет необходимо твоему *.c будет взято из *.h, остальное игнорируется. Определение включению заголовочных файлов не скажу, не задавался таким вопросом, раньше не где ни встречал.


.h-файлы, точнее директива перпроцессора '#include', допускает множество разнообразных применений, в том числе никоим образом не связанных с какими-то "реализациями", "инициализациями" и "взятием того, что необходимо". Обработка включаемых файлов в системе трансляции С/С++ выполняется текстовым препроцессором, который не имеет ни малейшего представления о языках С/С++ как таковых. Соответственно, никаких чисто языковых зависимостей это процесс иметь не может. С таким же успехом, с которым препроцессор может использваться для вставки объявлений в единицу трансляции, он модет использоваться для вставки гитарных табов в текст "Песни о юном барабанщике".
Best regards,
Андрей Тарасевич
Re: "компилируется" ли *.h файл
От: Chipsеt Россия http://merlinko.com
Дата: 14.04.06 17:31
Оценка:
Здравствуйте, physic, Вы писали:

P>как можно назвать обработку и подклучение *.h файла в C++ проекте?


Прикольно реализовано в Boost.Test, там реализация лежит в *.ipp которая инклюдиться в файл, в первый раз такое вижу.
... << RSDN@Home 1.2.0 alpha rev. 648>>
"Всё что не убивает нас, делает нас сильнее..."
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.