Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / VS2012: Зачем VS захламляет глобальный контекст? / 11 сообщений из 11, страница 1 из 1
29.12.2012, 14:32
    #38097227
GermanV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VS2012: Зачем VS захламляет глобальный контекст?
Решил не захламлять глобальный контекст и использовать С++ способ включения библиотечных файлов (добавляем префикс "c", а постфикс ".h" убираем).

Код: plaintext
1.
#include <cstdio>



Но функция prinf() стала доступна как в пространстве имен std, так и глобально! Перешел к файлу cstdio и там увидел такое:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
#ifdef _STD_USING
 #undef _STD_USING
  #include <stdio.h>
 #define _STD_USING

#else /* _STD_USING */
 #include <stdio.h>
#endif /* _STD_USING */



Вопрос: как избежать захламления глобального контекста и работать только через пространство имен std?
...
Рейтинг: 0 / 0
29.12.2012, 15:11
    #38097271
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VS2012: Зачем VS захламляет глобальный контекст?
GermanV,

На самом деле в GCC например есть та же самая проблема.
Не смотря на то что это не соответствует стандарту, это сделано для упрощения взаимодействия С и С++ кода.
Думаю что придется смириться.
...
Рейтинг: 0 / 0
29.12.2012, 15:15
    #38097276
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VS2012: Зачем VS захламляет глобальный контекст?
А что, объём глобального контекста ограничен и он может кончиться?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
29.12.2012, 15:33
    #38097296
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VS2012: Зачем VS захламляет глобальный контекст?
Дополнение насчет стандартности такого поведения.

До С++11 это было нестандартно, но так как мало какие из компиляторов соблюдали, то в С++11 решили привести стандарт к реальности и теперь стандарт требует чтобы хедеры <c...> обязательно объявляли имена в std:: и по желанию в глобальном пространстве.
Т.е. описанное загрязнение :: начиная с С++11 - вполне стандартно.

С++11, 17.6.2.3the declarations (except for names which are defined as macros in C) are within namespace scope (3.3.5) of the namespace std. It is unspecified whether these names are first declared within the global namespace scope and are then injected into namespace std by explicit using-declarations


Здесь обсуждение http://stackoverflow.com/questions/2118422/scope-of-c-libraries-in-c-x-h-vs-cx
...
Рейтинг: 0 / 0
29.12.2012, 16:58
    #38097378
GermanV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VS2012: Зачем VS захламляет глобальный контекст?
А может я чего-то упустил: можно не подключать всю либу, а для компоновщика как-то сообщить откуда брать функцию? Например, так:

Код: plaintext
1.
cstdio::prinf("Hi!");



Я бы лучше "точечно" к библиотекам обращался, чем "по- артиллерийски". Вспоминается фраза: одно неловкое движение, и ты- отец :)
...
Рейтинг: 0 / 0
29.12.2012, 17:51
    #38097416
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VS2012: Зачем VS захламляет глобальный контекст?
GermanV,

Дык std::printf(xxx) же.
...
Рейтинг: 0 / 0
29.12.2012, 18:10
    #38097429
GermanV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VS2012: Зачем VS захламляет глобальный контекст?
Anatoly MoskovskyGermanV,

Дык std::printf(xxx) же.

Так придется подключать всю библиотеку. А хочется не подключать заголовочный файл (чтобы не было лишних возможностей), а подключить конкретную функцию из этой библиотеки.
...
Рейтинг: 0 / 0
29.12.2012, 18:14
    #38097433
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VS2012: Зачем VS захламляет глобальный контекст?
GermanVТак придется подключать всю библиотеку. А хочется не подключать заголовочный файл (чтобы не было лишних возможностей), а подключить конкретную функцию из этой библиотеки.Г-н Мейерс в одном из своих советов объясняет, почему вредно тянуться левой рукой к правому уху из-за спины.

P.S. Что ж вы, батенька, на WinAPI не пишете?
...
Рейтинг: 0 / 0
29.12.2012, 18:27
    #38097443
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VS2012: Зачем VS захламляет глобальный контекст?
GermanVА хочется не подключать заголовочный файл (чтобы не было лишних возможностей), а подключить конкретную функцию из этой библиотеки.
Кроссплатформенно - нельзя (даже в пределах одного VS существуют разные формы декларации прототипов стандартных функций в зависимости от опций сборки).
Просто забудьте эту блажь и включайте весь хедер, как положено.
...
Рейтинг: 0 / 0
29.12.2012, 19:09
    #38097463
Edd.Dragon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VS2012: Зачем VS захламляет глобальный контекст?
GermanVчтобы не было лишних возможностей
Каких именно и в чем конкретно проявляются проблемы от этого?

Вот охота тебе заниматься обезопасиванием себя от иноплатнетного вторжения.
...
Рейтинг: 0 / 0
30.12.2012, 00:12
    #38097584
GermanV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VS2012: Зачем VS захламляет глобальный контекст?
Anatoly MoskovskyКроссплатформенно - нельзя (даже в пределах одного VS существуют разные формы декларации прототипов стандартных функций в зависимости от опций сборки).
Просто забудьте эту блажь и включайте весь хедер, как положено.

Спасибо.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / VS2012: Зачем VS захламляет глобальный контекст? / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]