Заголовки в стиле C++
Хотел бы поднять вот какую тему: разница между заголовками и заголовочными файлами. У Г. Шилдта написано, что в C++ (в отличие от Си) заголовок не обязан соответствовать заголовочному файлу, что это - некая абстракция. Так же, если на C++ использовать устаревший (в его понятии) стиль
А теперь вопрос: подключаю я тот же iostream. Где компилятор будет искать его содержимое? Если есть iostream.h, мне все ясно. Но, например, в своей версии MinGW я нигде такого файла не нашел, однако все работает. Тогда я сделал предположение, что где-то лежит прекомпилированый заголовок (*.gch). Но и его я не нашел. Не люблю не понимать, что делает компилятор... Помогите разобраться, пожалуйста.
// Copyright (C) 1997, 1998, 1999, 2001, 2002, 2005, 2008, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 3, or (at your option)
// any later version.
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// Under Section 7 of GPL version 3, you are granted additional
// permissions described in the GCC Runtime Library Exception, version
// 3.1, as published by the Free Software Foundation.
// You should have received a copy of the GNU General Public License and
// a copy of the GCC Runtime Library Exception along with this program;
// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
// <http://www.gnu.org/licenses/>.
/** @file include/iostream
* This is a Standard C++ Library header.
*/
//
// ISO C++ 14882: 27.3 Standard iostream objects
//
#ifndef _GLIBCXX_IOSTREAM
#define _GLIBCXX_IOSTREAM 1
#pragma GCC system_header
#include <bits/c++config.h>
#include <ostream>
#include <istream>
namespace std _GLIBCXX_VISIBILITY(default)
{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @name Standard Stream Objects
*
* The <iostream> header declares the eight <em>standard stream
* objects</em>. For other declarations, see
* http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt11ch24.html
* and the @link iosfwd I/O forward declarations @endlink
*
* They are required by default to cooperate with the global C
* library's @c FILE streams, and to be available during program
* startup and termination. For more information, see the HOWTO
* linked to above.
*/
//@{
extern istream cin; /// Linked to standard input
extern ostream cout; /// Linked to standard output
extern ostream cerr; /// Linked to standard error (unbuffered)
extern ostream clog; /// Linked to standard error (buffered)
#ifdef _GLIBCXX_USE_WCHAR_T
extern wistream wcin; /// Linked to standard input
extern wostream wcout; /// Linked to standard output
extern wostream wcerr; /// Linked to standard error (unbuffered)
extern wostream wclog; /// Linked to standard error (buffered)
#endif
//@}
// For construction of filebuffers for cout, cin, cerr, clog et. al.
static ios_base::Init __ioinit;
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace
#endif /* _GLIBCXX_IOSTREAM */
В MinGW у меня есть iostream (без расширения), аналогичный приведенному. В студии нечто подобное тоже нашел. Думаю так: это еще один промежуточный заголовочный файл, хоть и без .h. Ссылается на другие заголовки и заголовочные файлы, имеет свои прагмы и макросы. Директива includе его содержимое подставляет в код программы на этапе препроцессора. Сама реализация может быть где угодно (в бинарниках типа статических и/или динамических библиотек, объектниках и т.п, а может и в исходниках). Это подобно заголовочным файлам верхнего уровня в WinAPI, типа windows.h. Такое вот представление у меня о заголовках, может чем-то более важным они отличаются, кто знает просветите, пожалуйста.
P.S. В Code::Blocks много удобных фишек. Одна из них - подводите курсор к имени заголовка и по правой кнопке - меню, где есть пункт открыть инклюд-файл.
У Вас установлен Visual Studio?
Если Да,там и будет искать iostream. Либо в MinGW включены расширения для библиотек Microsoft Visual C++
Ну как Вам сказать... )
В моём случае это c:Program Files (x86)CodeBlocksMinGWinclude, но там нет папки c++ и даже iostream.h в самой папке. )
Мы тут не в дурака играем - есть вопрос дайте ясный ответ , а не типа тово:
По ходу у MinGW закомпилированы в свой формат расширения для библиотек Microsoft Visual C++
Для чего Вам нужен MinGW - Visual Studio за глаза и ракам хватает.
В MinGW у меня есть iostream (без расширения), аналогичный приведенному. В студии нечто подобное тоже нашел. Думаю так: это еще один промежуточный заголовочный файл, хоть и без .h. Ссылается на другие заголовки и заголовочные файлы, имеет свои прагмы и макросы. Директива includе его содержимое подставляет в код программы на этапе препроцессора. Сама реализация может быть где угодно (в бинарниках типа статических и/или динамических библиотек, объектниках и т.п, а может и в исходниках). Это подобно заголовочным файлам верхнего уровня в WinAPI, типа windows.h. Такое вот представление у меня о заголовках, может чем-то более важным они отличаются, кто знает просветите, пожалуйста.
P.S. В Code::Blocks много удобных фишек. Одна из них - подводите курсор к имени заголовка и по правой кнопке - меню, где есть пункт открыть инклюд-файл.
sadovoya вот тупа ссылка
Вы sadovoya в адеквате чушь-сабачию мелите
На каких таких платформах работает?
Кто чушь несет - видно из ответов.
Кто чушь несет - видно из ответов.
Ну ВЫ sadovoya и ДУРА
sadovoya - перевод на русский садовая тут без разнице тупило ЁЩЕ то sadovoya
Нет там никакой абстракции, тупой препроцессор и ничего более.
То, что "кто-то" оставил себе "поле для маневра" дела не меняет.
PS: И нечего читать дурацкие книжки еще и в творческом переводе.
PPS: Про precompiled headers забудьте лет на пять.
Meander с самого начала оказался прав. Только я не в тот каталог смотрел. Спасибо.
Sadovoya, спасибо. Не сообразил, хотя переменные и прототипы давно так ищу.
А что до UserNet2008, пускай с ним администрация беседует. Попытка показать знания при их отсутствии - это не нарушение. Все ошибаются. А вот откровенное хамство - нарушение.
Всем спасибо. Думаю, тему можно закрывать.
Ramon, на практике, действительно, заголовки соответствуют заголовочным файлам. В стандарте, пока, не нашел доказательств точки зрения Шилдта. Хотя нельзя считать авторитетным источником страницы интернет, но про заголовки написано, в частности, здесь. Вероятно, авторам компиляторов оставили простор для действий, а совместимость обеспечили старым методом: включение текста заголовочного файла.
А что тут подробнее?... Достаточно специфичная и ограниченная техника которая используется в основном для ускорения сборки больших проектов, с исходниками на полгига например. Естественно, что для получения оного нужно понимать что вы делаете, иначе ну будет еще одна фича в сборке, а сборка не ускорится, а то и замедлится. У товарища явно не сей случай, ему это не надо впрочем как и большинству.