Суть #include
Столкнулся с такой необходимостью - узнать, как работает деректива #include SomeFile.h, а то с гвардами умаялся.
Не просветите (в рунете ничего путного не нашел)?
Заранее благодарен
(Если это C - C#-ом не пользовался)
Не просветите (в рунете ничего путного не нашел)?
Лентяй.
Google: директива #include
Первая же ссылка: http://www.languagec.info/include.php
А в C# и нет #include :о)
(Если это C - C#-ом не пользовался)
Это было из без гугла понятно.
Интересует правила иерархии подлючения как в .h так и в.cpp файлы. Почему, например, невозможны перекрестные инклюды файлов 1.h и 2.h, а в 2.cpp можно свободно инклюдить 1.h?
Интересует правила иерархии подлючения как в .h так и в.cpp файлы. Почему, например, невозможны перекрестные инклюды файлов 1.h и 2.h, а в 2.cpp можно свободно инклюдить 1.h?
если используешь в срр определения из *.h тогда подключаешь его
если в подкоченных *.h уже есть ссылка на другие *.h тогда другие не подключаешь
Интересует правила иерархии подлючения как в .h так и в.cpp файлы. Почему, например, невозможны перекрестные инклюды файлов 1.h и 2.h, а в 2.cpp можно свободно инклюдить 1.h?
Везде одни и теже правила. Ты что-то путаешь или у тебя особый компилятор.
Интересует правила иерархии подлючения как в .h так и в.cpp файлы. Почему, например, невозможны перекрестные инклюды файлов 1.h и 2.h, а в 2.cpp можно свободно инклюдить 1.h?
А ты сам как думаешь? Смотри, если в 1.h подключаем 2.h и наоборот, то при построении полного текста произойдет зацикливание: в файл 1.h включится текст с дерективой #include 1.h и потребуется включать файлы снова и снова до бесконечности.
Для того, чтобы такого избежать используется либо:
[highlight=C]
#ifndef FILENAME
#define FILENAME
...
#endif
[/highlight]
либо просто:
[highlight=C]
#pragma once
[/highlight]
Я этого не знал. Спасибо.
Я этого не знал. Спасибо.
Тогда советую дополнительно прочитать или перечитать о работе препроцессора и директивах (хотя бы include и группы define).
Вот, например:
http://club.shelek.ru/viewart.php?id=114
"По умолчанию препроцессор не создает нового файла на диске или другом носителе - он выполняет свои подстановки, соответствующие директивам препроцессора и сразу начинается этап компиляции. Но, можно так настроить вашу среду программирования, что вы получите файл - результат работы препроцессора. Содержимое этого файла будет соответствовать написанному вами коду, но в местах, где у вас находились директивы препроцессора уже будут находиться вставленные вместо них соответствующие участки."
А как мне настроить среду VC++(6), чтобы я смог посмотреть этот "конечный" заголовок?