"компилируется" ли *.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>>
"Всё что не убивает нас, делает нас сильнее..."
Re[2]: "компилируется" ли *.h файл
От: Alxndr Германия http://www.google.com/profiles/alexander.poluektov#buzz
Дата: 14.04.06 18:02
Оценка:
Здравствуйте, Chipsеt, Вы писали:

C>Прикольно реализовано в Boost.Test, там реализация лежит в *.ipp которая инклюдиться в файл, в первый раз такое вижу.


Эта реализация совершенно случайно не генерируется автоматом? (просто гипотеза, нет времени сейчас посмотреть).
Re: "компилируется" ли *.h файл
От: Vain Россия google.ru
Дата: 15.04.06 16:14
Оценка:
Здравствуйте, physic, Вы писали:

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

К сказанному выше, хочу добывить вот что.
Некоторые наверно считают что в проект (в данном случае это MSVC, но думаю что и в других ИДЕ так) не обязательно включать заголовочные файлы, а достаточно токо одних единиц трансляции (cpp/rc/и т.д.), так вот это не совсем так.
Сам сталкивался с такими проблемами, когда в папке с исходниками лежали нужные хедеры, а на их включение в какой нить cpp через #include "bla-bla/bla-bla.h" компилятор ругался, пока bla-bla.h не был добавлен в проект
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[3]: "компилируется" ли *.h файл
От: Chipsеt Россия http://merlinko.com
Дата: 15.04.06 16:22
Оценка:
Здравствуйте, Alxndr, Вы писали:

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


C>>Прикольно реализовано в Boost.Test, там реализация лежит в *.ipp которая инклюдиться в файл, в первый раз такое вижу.


A>Эта реализация совершенно случайно не генерируется автоматом? (просто гипотеза, нет времени сейчас посмотреть).


Нет кажеться. Никаких автоматов
"Всё что не убивает нас, делает нас сильнее..."
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.