powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / VS2012: Зачем VS захламляет глобальный контекст?
11 сообщений из 11, страница 1 из 1
VS2012: Зачем VS захламляет глобальный контекст?
    #38097227
GermanV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Решил не захламлять глобальный контекст и использовать С++ способ включения библиотечных файлов (добавляем префикс "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
VS2012: Зачем VS захламляет глобальный контекст?
    #38097271
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GermanV,

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

До С++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
VS2012: Зачем VS захламляет глобальный контекст?
    #38097378
GermanV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А может я чего-то упустил: можно не подключать всю либу, а для компоновщика как-то сообщить откуда брать функцию? Например, так:

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



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

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

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

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

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

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

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


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