Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Заголовки в стиле C++

27K
27 мая 2015 года
mnanorn
78 / / 01.12.2013
Здравствуйте!

Хотел бы поднять вот какую тему: разница между заголовками и заголовочными файлами. У Г. Шилдта написано, что в C++ (в отличие от Си) заголовок не обязан соответствовать заголовочному файлу, что это - некая абстракция. Так же, если на C++ использовать устаревший (в его понятии) стиль
 
Код:
#include <stdio.h>
вместо
 
Код:
#include <cstdio>
, например, то пространства имен поддерживаться не будут и все символы попадут в глобальное пространство имен. С этим все, вроде, ясно...

А теперь вопрос: подключаю я тот же iostream. Где компилятор будет искать его содержимое? Если есть iostream.h, мне все ясно. Но, например, в своей версии MinGW я нигде такого файла не нашел, однако все работает. Тогда я сделал предположение, что где-то лежит прекомпилированый заголовок (*.gch). Но и его я не нашел. Не люблю не понимать, что делает компилятор... Помогите разобраться, пожалуйста.
446
27 мая 2015 года
Meander
487 / / 04.09.2011
У меня в каталоге Dev-Cpp\MinGW32\lib\gcc\mingw32\4.7.2\include\c++ находится много файлов без расширения, в том числе файл iostream, вот его содержимое:
Код:
// Standard iostream objects -*- C++ -*-

// 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 &lt;iostream&gt; 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 */
326
28 мая 2015 года
sadovoya
757 / / 19.11.2005
Студия тут вообще ни при чем. С++ на разных платформах работает и стандартная библиотека С++ не только Microsoft реализована.

В MinGW у меня есть iostream (без расширения), аналогичный приведенному. В студии нечто подобное тоже нашел. Думаю так: это еще один промежуточный заголовочный файл, хоть и без .h. Ссылается на другие заголовки и заголовочные файлы, имеет свои прагмы и макросы. Директива includе его содержимое подставляет в код программы на этапе препроцессора. Сама реализация может быть где угодно (в бинарниках типа статических и/или динамических библиотек, объектниках и т.п, а может и в исходниках). Это подобно заголовочным файлам верхнего уровня в WinAPI, типа windows.h. Такое вот представление у меня о заголовках, может чем-то более важным они отличаются, кто знает просветите, пожалуйста.

P.S. В Code::Blocks много удобных фишек. Одна из них - подводите курсор к имени заголовка и по правой кнопке - меню, где есть пункт открыть инклюд-файл.
327
27 мая 2015 года
UserNet2008
748 / / 03.04.2010
Цитата:
Где компилятор будет искать его содержимое?

У Вас установлен Visual Studio?
Если Да,там и будет искать iostream. Либо в MinGW включены расширения для библиотек Microsoft Visual C++

27K
27 мая 2015 года
mnanorn
78 / / 01.12.2013
Цитата:

У Вас установлен Visual Studio?

Цитата:
...в своей версии MinGW...

Ну как Вам сказать... )

Цитата:
У меня в каталоге Dev-CppMinGW32libgccmingw324.7.2includec++...

В моём случае это c:Program Files (x86)CodeBlocksMinGWinclude, но там нет папки c++ и даже iostream.h в самой папке. )

327
27 мая 2015 года
UserNet2008
748 / / 03.04.2010
Цитата: mnanorn
Цитата:

У Вас установлен Visual Studio?

Цитата:
...в своей версии MinGW...

Ну как Вам сказать... )

Цитата:
У меня в каталоге Dev-CppMinGW32libgccmingw324.7.2includec++...

В моём случае это c:Program Files (x86)CodeBlocksMinGWinclude, но там нет папки c++ и даже iostream.h в самой папке. )

Мы тут не в дурака играем - есть вопрос дайте ясный ответ , а не типа тово:

Цитата:
Ну как Вам сказать...

По ходу у MinGW закомпилированы в свой формат расширения для библиотек Microsoft Visual C++
Для чего Вам нужен MinGW - Visual Studio за глаза и ракам хватает.

327
28 мая 2015 года
UserNet2008
748 / / 03.04.2010
Цитата: sadovoya
Студия тут вообще ни при чем. С++ на разных платформах работает и стандартная библиотека С++ не только Microsoft реализована.

В MinGW у меня есть iostream (без расширения), аналогичный приведенному. В студии нечто подобное тоже нашел. Думаю так: это еще один промежуточный заголовочный файл, хоть и без .h. Ссылается на другие заголовки и заголовочные файлы, имеет свои прагмы и макросы. Директива includе его содержимое подставляет в код программы на этапе препроцессора. Сама реализация может быть где угодно (в бинарниках типа статических и/или динамических библиотек, объектниках и т.п, а может и в исходниках). Это подобно заголовочным файлам верхнего уровня в WinAPI, типа windows.h. Такое вот представление у меня о заголовках, может чем-то более важным они отличаются, кто знает просветите, пожалуйста.

P.S. В Code::Blocks много удобных фишек. Одна из них - подводите курсор к имени заголовка и по правой кнопке - меню, где есть пункт открыть инклюд-файл.

sadovoya вот тупа ссылка

Цитата:
Студия тут вообще ни при чем. С++ на разных платформах работает и стандартная библиотека С++ не только Microsoft реализована.

Вы sadovoya в адеквате чушь-сабачию мелите

Цитата:
С++ на разных платформах работает

На каких таких платформах работает?

326
28 мая 2015 года
sadovoya
757 / / 19.11.2005
Вы сами внимательно свою ссылку читали ? Там написано, что MinGW заимствует стандартную библиотеку С++ из студии?
Кто чушь несет - видно из ответов.
327
28 мая 2015 года
UserNet2008
748 / / 03.04.2010
Цитата: sadovoya
Вы сами внимательно свою ссылку читали ? Там написано, что MinGW заимствует стандартную библиотеку С++ из студии?
Кто чушь несет - видно из ответов.

Ну ВЫ sadovoya и ДУРА

326
28 мая 2015 года
sadovoya
757 / / 19.11.2005
Дура - женского рода. Вы еще раз облажались. На сем я заканчиваю этот треп.
327
28 мая 2015 года
UserNet2008
748 / / 03.04.2010
Цитата: sadovoya
Дура - женского рода. Вы еще раз облажались. На сем я заканчиваю этот треп.

sadovoya - перевод на русский садовая тут без разнице тупило ЁЩЕ то sadovoya

260
28 мая 2015 года
Ramon
1.1K / / 16.08.2003
В стандарте на C++ нет никакого iostream.h.
Нет там никакой абстракции, тупой препроцессор и ничего более.
То, что "кто-то" оставил себе "поле для маневра" дела не меняет.

PS: И нечего читать дурацкие книжки еще и в творческом переводе.
PPS: Про precompiled headers забудьте лет на пять.
27K
28 мая 2015 года
mnanorn
78 / / 01.12.2013
Цитата:
У меня в каталоге Dev-CppMinGW32libgccmingw324.7.2includec++ находится много файлов без расширения, в том числе файл iostream, вот его содержимое:...

Meander с самого начала оказался прав. Только я не в тот каталог смотрел. Спасибо.

Цитата:
P.S. В Code::Blocks много удобных фишек. Одна из них - подводите курсор к имени заголовка и по правой кнопке - меню, где есть пункт открыть инклюд-файл.

Sadovoya, спасибо. Не сообразил, хотя переменные и прототипы давно так ищу.

А что до UserNet2008, пускай с ним администрация беседует. Попытка показать знания при их отсутствии - это не нарушение. Все ошибаются. А вот откровенное хамство - нарушение.

Всем спасибо. Думаю, тему можно закрывать.

27K
28 мая 2015 года
mnanorn
78 / / 01.12.2013
Цитата:
Нет там никакой абстракции, тупой препроцессор и ничего более.

Ramon, на практике, действительно, заголовки соответствуют заголовочным файлам. В стандарте, пока, не нашел доказательств точки зрения Шилдта. Хотя нельзя считать авторитетным источником страницы интернет, но про заголовки написано, в частности, здесь. Вероятно, авторам компиляторов оставили простор для действий, а совместимость обеспечили старым методом: включение текста заголовочного файла.

7
03 июня 2015 года
@pixo $oft
3.4K / / 20.09.2006
Ramon, можно поподробнее про твой PPS? :)
260
03 июня 2015 года
Ramon
1.1K / / 16.08.2003
Цитата: @pixo $oft
Ramon, можно поподробнее про твой PPS? :)

А что тут подробнее?... Достаточно специфичная и ограниченная техника которая используется в основном для ускорения сборки больших проектов, с исходниками на полгига например. Естественно, что для получения оного нужно понимать что вы делаете, иначе ну будет еще одна фича в сборке, а сборка не ускорится, а то и замедлится. У товарища явно не сей случай, ему это не надо впрочем как и большинству.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог